2023年12月6日發(作者:范家大院)

SAS編程基礎(2):常用數據步與過程步
/*
2018/11/29 SAS開發學習 常用語法及關鍵字
數據集合并:merge t
排序:proc sort
轉置:proc transpo
寫sql語句:proc sql
頻數統計:proc freq
proc hpsummary
統計分析:proc means
proc univariate
proc logistic
*/
/* 數據步與過程步
/
/
數據步 讀取處理數據
常用關鍵字
data 創建數據集 <參數選項>
SAS 處理數據集語句
run; 結束
t
merge
*/
data students (keep=name x class address);
length address $30;
input id name $ x $ class address;
cards;
1001 高溪紅 F 1 衡陽神龍大酒店
1002 張明明 M 2 北京市東城區
;
run;
/* data 數據步 及過濾 */
libname jx “d:jx”;
%let dir=“d:”;
filename fil “(&dir)”;
data _bj ;
infile fil;
input zone $ open_count city $;
if city in (“北京”, “青島”) then output _bj;
el output ;
run;
libname jx “d:jx”;
%let dir=“d:”;
filename fil “(&dir)”;
data cust;
infile fil;
input zone $ open_count city $;
run;
data
t cust (where=(city in (“北京”, “青島”);
run;
/* t語句
/data stu;
t student (keep=name x address obs=1);
run;
/
t以及過濾
/
data stu;
t student (keep=name x address);
if x=“F”;
run;
/
merge 語句 將兩個或多個數據集進行橫向合并
語法: MERGE <數據集1> <選項> <數據集2> <選項>
常用選項: keep drop rename where in
一對一合并和匹配合并
/
data inf_stu;
length address $30;
input id name $ x $ class address;
cards;
1001 ltf M 01 湖南省衡陽市
1002 hch F 02 湖南省長沙市
;
run;
data score_stu;
input id score;
cards;
1001 99
1002 100
;
run;
proc sort data=inf_stu;
by id;
run;
proc sort data=score_stu;
by id;
run;
data inf_score (keep=id name score);
merge inf_stu score_stu;
by id;
run;
/
查找兩個數據集中相同的數據 byid
data inf_score (keep=id name score);
merge inf_stu(in=a) score_stu(in=b);
if a and b;
by id;
run;
查找兩個數據集中不同的數據 byid
data inf_score (keep=id name score);
merge inf_stu(in=a) score_stu(in=b);
if ^a and b;
by id;
run;
*//* 數據集應用案列
/
/
數據集條件過濾
取數據
刪數據
*/
%let dir=“d:”;
filename fil “(&dir)”;
libname jx “d:jx”;
data 138;
infile fil dsd missover;
input @20 card_type $3. @;
if card_type=“138” then do;
input @1 qh $3.
@4 card_nm $16.
@23 name $8.
@31 address :$20.
;
ouput 138;
end;
run;
%let dir=“d:”;
filename fil “(&dir)”;
libname jx “d:jx”;
data 138;
infile fil dsd missover;
input @20 card_type $3. @;
if card_type=“138” then delete;
if card_type^=“138” then do;
input @1 qh $3.
@4 card_nm $16.
@23 name $8.
@31 address :$20.
;
ouput 138;
end;
run;
/* 宏過程 %macro 其實就相當于定義函數 */
%let dir=“d:jxinf_”;
filename sj “(&dir)”;
libname csj “d:jx”;
%macro loadfile(v_lib);
data &v__custer;
infile sj firstobs=2 end=final length=length;
input @1 qh $3.
@4 card_nm $16.
@20 card_type $3.
@23 name $8.
@31 address :$20.
;
run;
%mend;
%%loadfile(csj.);/* 使用宏變量 進行模糊查詢
/
data city_inf;
length city $30.;
input id city $;
cards;
1001 上海市南京路
1002 北京西城區
1003 上海市浦東區
1004 天津濱海新區
1005 北京東城區
1006 山東濟寧
1007 山東濟南
1008 北京市豐臺區
;
run;
/
通過宏實現模糊查詢 1.多參數 2.條件語句
/
%macro indexs/PARMBUFF; /
parambyff 可接受多個參數
/
%local num dsname; /
局部變量 定義局部變量
/
%let num=2;
%let dsname=%scan(&syspbuff, &num);
/
parabuff 信息傳遞到 dsname scan函數實現查找功能 這里把num=2 第二個變量開始查找 */
%do %while(%quote(&dsname) ne %quote());
%if &name>2 %then %do;
or
%end;
index(%scan(&syspbuff, 1), “&dsname”)>0
%let num=%eval(&num+1);
%let dsname=%scan(&syspbuff, &num);
%end;
%mend;
data city;
t city_inf;
where %indexes(city, 北京, 上海, 山東);
run;
proc print data=city;
run;
/* call 子程序數據步應用 */
%macro callpro(v_param);
data null;
x=“we”;
z=&v_param;
call symput(“v_var”, x);
%mend callpro;
%callpro(1);
run;
data temp;
y="&v_var";
run;
proc print data=temp;
run;
/* 數據集輸出應用
1. 數據集輸出到臨時邏輯庫 sas默認是work邏輯庫 work可以省略
2. 數據集輸出到永久邏輯庫 libname創建永久邏輯路 Libname 邏輯庫名 物理路徑
*/
/* 關系型數據庫數據處理
/
/
鏈接關系型數據庫的兩種方式
1. 創建永久邏輯庫 讀取
2. 通過 pass through 的方式,其就是在 proc sql 里面 連接操作mysql數據庫
/
/
libname test mysql ur=root password=sas123 databa=mydb
rver=localhost port=3306;
/
/
proc sql;
connect to mysql
(ur=root password=sas123 rver=localhost
databa=world port=3306);
create table b as lect * from connection to mysql
(lect * from city);
execute(create table cc as lect * from aa
)by mysql;
disconnect from mysql;
quit;
*/
/* 過程步 對生成的數據集進行分析和處理
語法格式: PROC 過程名 <選項>;
過程語句 <參數選項>;
run;
var 指定分析變量 多個變量用空格分隔
by 指定一個過多個分組變量對數據集分組 數據集要先排序
class 指定一個或多個分類變量 不需要事先對數據集排序
model 建模中 指定模型的因變量和自變量 以及相關模型選項
ferq 指定用于分析變量的頻數變量
weight 指定權數變量 已獲得該變量占百分比的權重
id 指定觀測變量 輸出會去掉obs選項標識
output 對分析結果輸出到新數據集
where 條件選項語句
title 輸出文件加入標題信息
footnote 輸出文件加入腳注信息
options 通過此語句設置 改變sas系統的默認設置
*/data score;
input id name $ class math english chine;
cards;
1001 高明 1 89 78 89
1002 中海 1 76 99 78
1003 劉海洋 1 88 56 66
1004 楊小帥 1 99 89 98
1005 趙曉紅 1 87 86 83
1006 馬西瑞 1 89 58 43
;
run;
proc means data=score sum min max;
var math english chine;
run;
/*
排序:proc sort
轉置:proc transpo
寫sql語句:proc sql
頻數統計:proc freq
proc hpsummary
統計分析:proc means
proc univariate
proc logistic
*/
/* print過程 */
data score;
input id name $ class math english chine;
cards;
1001 高明 1 89 78 89
1002 中海 1 76 99 78
1003 劉海洋 1 88 56 66
1004 楊小帥 1 99 89 98
1005 趙曉紅 1 87 86 83
1006 馬西瑞 1 89 58 43
;
run;
proc print data=score noobs;
where math>80 and english>80 and chine>80;
titile “各科成績大于80分的學生信息”;
run;/* means 過程 t檢驗
/
data tcheck;
input milck @@;
milck=milck-450;
cards;
452 436 447 439 445 460 442 456 447 440
;
run;
proc means data=tcheck t prt;
run;
/
copy過程 復制一個邏輯庫下所有的數據集到另一個邏輯庫下 或者從一個文件復制到另一個文件
語法格式:
proc copy in=源邏輯庫 out=目標邏輯庫
SELECT 成員名
EXCLUDE 成員名
run;
*/
/* SQL 過程 實現關系數據庫的結構化查詢功能
語法格式: proc sql <選項>;
數據操縱語言;
quit;
*/
/* report 過程 制作報表的工具
語法格式: proc report <報表選項>;
常用報表設置語句;
run;
常用關鍵字:
headline: 指定表頭畫線
headskip: 指定一空行
title: 指定主標題
title2: 指定副標題
column: 指定報表顯示列
define: 對報表顯示列定義屬性
compute: 指定計算列 其結束語句為endcomp
*/
/* freq 過程 計數統計推斷
作用1: 描述分析
作用2: 統計推斷 產生各種統計量 可分析變量間的關系
語法格式:
proc freq <選項>;
by 變量1 <變量2> … <變量n>;
exact 統計選項計算選項>;
output
tables requests 選項>;
test 選項;
weight 變量名選項>;
run;
/
data yb;
input group $ row colm fre;
cards;
甲組 1 1 49
甲組 1 2 50甲組 1 2 50
乙組 2 1 52
乙組 2 2 48
丙組 3 1 47
丙組 3 2 53
;
run;
proc freq data=yb;
tables group;
/
weight fre;
/
run;
/
summary 過程 主要用來對數值變量計算單個變量的基本統計量
語法格式:
proc summary <選項> <統計關鍵量>;
var 變量名;
by 變量名;
class 變量名;
freq 變量名;
weight 變量名;
ID 變量名;
output 數據集名 選項;
run;
*/
data students;
input group age height weight x $;
cards;
2 35 162 42 f
1 31 173 43 m
2 42 156 56 f
1 53 152 39 f
1 42 173 63 m
1 28 165 55 f
2 33 157 66 f
2 17 162 46 f
1 16 173 45 m
1 25 180 66 m
;
run;
proc sort data=students;
by group;
proc summary data=students mean std n max min range stderr cv;
var age height weight;
class x;
by group;
output out=stu_analy;
proc print data=stu_analy;
run;/* compare 過程 主要用來比較兩個數據集的內容
語法格式:
proc compare <選項>;
var 變量名;
by 變量名;
id 變量名;
with 變量名;
run;
*/
本文發布于:2023-12-06 16:51:24,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1701852684237677.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:SAS編程基礎(2):常用數據步與過程步.doc
本文 PDF 下載地址:SAS編程基礎(2):常用數據步與過程步.pdf
| 留言與評論(共有 0 條評論) |