SAS基础语句
一、 新建逻辑库
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;