一、 新建邏輯庫
Libname 邏輯庫名 “路徑”;
Libname ana “C:\Desktop\SAS培訓”;
二、 導入數據表
1、 手工導入
可直接從“文件-導入數據”,從外部導入excel、csv等格式的數據表。
2、 代碼導入
proc import
datafile="D:\base.csv"
out=ana.limit_base replace;
getnames=yes;/*以第一行為變量名稱*/
delimiter=','; /*分隔符*/
GUESSINROWS=225409;/*SAS默認讀取前20行判斷數據類型,故可能判斷錯,需將此參數設置大一點*/
run;
三、 數據加工(data步)
1、 復制數據(set)
Data test1;
Set test;
Run;
2、 保留字段(keep)
Keep 字段名
Data test2;
Set test;
Keep cust_no credit_dna4;
Run;
3、 刪除字段(drop)
drop字段名
Data test3;
Set test;
drop cust_no credit_dna4;
Run;
4、 字段重命名(rename)
Rename 舊字段名=新字段名
Data test4;
Set test;
rename cust_no=cust_no_1;
Run;
5、 字段運算
Data test5;
Set test;
C=a+b;
Run;
6、 條件判斷(if……then……)
If 條件 then 結果
Data test6;
Set test;
If 0<=a<10 then z=”01.[0,10)”;
else if 10<=a<20 then z=”02.[10,20)”;
else if 20<=a<30 then z=”03.[20,30)”;
else z=”04.>=30”;
run;
7、 刪除記錄(delete)
Data test7;
Set test;
If a=10 then delete;
Run;
8、 篩選記錄(where、if)
(1)where
Data test8_1;
Set test;
Where x>10;
Run;
(2)if
Data test8_2;
Set test;
Where if>10;
Run;
Data test8_3;
Set test;
Z=x+y;
If z>10;
Run;
9、 數據縱向合並(set,相當於sql中的union)
Data test9;
Set table_1 table_2;
Run;
10、數據橫向合並(merge)
Merge之前需對數據集按照關聯字段進行排序。
(1)左連接(相當於sql中的left join)
Data test10_1;
Merge table_1(in=a) table_2(in=b);
By cust_no;
If a;
Run;
(2)內連接(相當於sql中的inner join)
Data test10_2;
Merge table_1(in=a) table_2(in=b);
By cust_no;
If a and b;
Run;
(3)全連接(相當於sql中的full join)
Data test10_3;
Merge table_1(in=a) table_2(in=b);
By cust_no;
If a or b;
Run;
(4)排除
數據在a中而不在b中
Data test10_4;
Merge table_1(in=a) table_2(in=b);
By cust_no;
If a=1 and b=0;
Run;
四、 數據分析(proc步)
1、 排序(proc sort)
Proc sort data=test out=test1;by cust_no month descending;run;
2、 頻數分布(proc freq)
(1) 單變量頻數分布
Proc freq data=test;
table x1 x2;
run;
(2) 多變量頻數分布
Proc freq data=test;
table x*y;
run;
3、 一般描述統計(proc means)
按x分組計算y的統計值
Proc means data=test;
Var y;
Class x;
Run;
4、 詳細描述統計(proc univariate)
按x分組計算y的統計值
Proc univariate data=test;
Var y;
Class x;
Run;
5、 sql
proc sql;
create table test5 as
select cust_no
,x1
,x2
From table1 a
Left join table2(drop=x3) b on a.cust_no=b.cust_no;
Quit;