python读取sas数据集_SAS编程基础-数据获取与数据集操作
(1)
1. 数据来源
SAS数据来源主要有两种:⼀是通过input语句创建,另外⼀种⽅式是通过外部数据⽂件获取。
1.1 libname
1.2 odbc
1.3 passthrough
1.4 import
1.5 input
该⽅式是在SAS系统下通过input语句输⼊SAS数据块,实践中是最不常的⽤的⼀块。
2. t语句
从⼀个或者多个SAS数据集中读取观测值并实现纵向合并。
2.1 keep=选项
data keep;
t sashelp.class(keep =age x);
run;
该⽅式创建了⼀个临时数据集keep(输出数据集),然后使⽤t语句从数据集sashelp.class中获取数据,keep=指定了读⼊的变量,其他冗余变量不读取,最后将读取的变量输⼊到数据集keep中。桌面字体大小怎么设置
清朝光绪还可以输出两个或者多个数据集:
data d1(keep=name)d2(keep=name x);
t sashelp.class(keep=name x);
run;
输出数据集d1和d2,并且分别在每个数据集后使⽤keep=指定了输出的变量。在t语句中使⽤keep=语句,可以提⾼运⾏效率,因为它使得t语句从数据集class中只读取了name和x两个变量到PDV中。去掉这⾥的keep=不会报错,但是效率会降低。进⼀步,如果将这⾥的keep修改为“keep=name”,即去掉x,那么导致的结果是数据集d2中只包含name变量,⽽不包含x变量,这是因为t语句没有读取x变量,⾃然不会输出到d2中。
2.2 rename=选项
将变量名重新命名:
笔触是什么意思>西藏自驾游data rename;
t sashelp.class(keep = name x rename=(name=name_new x=x_new));
run;
对重命名变量需要⽤括号括起来。
2.3 where表达式
添加筛选条件:
data where;
t sashelp.class(keep=name x where=(x='男'));月季花简介
run;
读取性别为男的⼈的姓名和性别。可以通过keep=的⽅式只输出性别为男的⼈的姓名,只需要将第⼀⾏修改为“data
where(keep=name);”即可。注意,不能通过去掉class后⾯的x实现,因为这⾥的keep指定的是读取变量,否则读取不到x就⽆法完成where后的x条件判断,就会报错。
2.4 in选项
把t语句后⾯不同的数据集通过标识变量显⽰出来:
1 data one;
2 input x y$ @@;
3 cards;
4 1 a 2 b 3c
5 ;
6 data two;
7 input x z$ @@;
8 cards;
9 4 d 5e10 ;11
12 data in1;13 t one(in=ina) two(in=inb);14 in_one =ina;15 in_two =inb;16 run;
个人思想政治表现如果⼀⾏的观测来源于数据集one,那么对⼀个的in_one的值是1,in_two的值为0.相反,如果该⾏观测来源于数据集two,那么in_one的值为0,in_two的值为1.简单来说,就是标识⼀下该⾏变量来源。
in本⾝不是个变量,所以不能通过in_one=in的形式得到标识变量,于是就先创建⼀个临时变量ina,然后把临时变量的值赋给输出变量
in_one。
还可以通过if语句实现标记:
1 data in2;
2 t one(in=ina) two(in=inb);
3 if ina=1 then flag=1;el flag =0;
4 run;
in选项可以标记观测的来源,那么就可以使⽤in选项对不同来源的数据进⾏不同的操作。
2.5 firstobs=和obs=
读取数据集中指定⾏到⾏的观测:
1 data obs;
2 t sashelp.class(firstobs=
3 obs=5);3 run;
读取class数据集中第3⾏到第5⾏的数据,包括第3和第5⾏。firstobs和obs都可以缺省,如果缺省firstobs代表默认为从第⼀个开始到obs指定的⾏,如果缺省obs,则代表默认为从firstobs指定的⾏到最后位置。两者都缺省,实质上就是未指定范围,即读取全部观测。
2.6 nobs=
2.7 point=
2.7.1 取指定的⼀条观测
1 data point1;
2 n=3;
3 t sashelp.class point=n;
4 output;
5 stop;
6 run;
读取第3条观测,注意point=后边必须跟变量,如果直接写成point=3是错误的。使⽤output输出第3条观测,使⽤stop终⽌运⾏。注意,如果没有output则不能将观测输出到数据集中,如果没有stop会使程序陷⼊死循环,数据指针⽆法判断是否指向了最后⼀条观测。stop经常和point搭配使⽤。
2.7.2 取指定的多条观测
1 data point2;
2 do n=2,4,6,7;
3 t sashelp.class point=n;
4 output;
5 end;
6 stop;
7 run;
output与end的位置不能互换,互换后只输出最后⼀条观测,即第7条观测。
2.8 nobs=和point=综合应⽤
快速读取最后⼀条观测:
1 data nobs_point;
2 t sashelp.class nobs=last point=last;
3 output;
4 stop;
5 run;
2.9 end=
⽂件是否结尾的标识:
1 data end;
2 t sashelp.class end=last_obs;
3 flag =last_obs;
4 run;
2.10 具有相同数据结构的多个数据集的合并
1 data concatenat;
树的分类
2 t sashelp.class sashelp.class(obs=10);
3 run;
2.11 使⽤output控制输出到多个数据集
1 data d1 d2;
2 t sashelp.class;
射手座明星
3 if _n_ le 10then output d1;
4 eloutput d2;
5 run;
_N_表⽰当前数据指针指向的⾏。output指定输出的数据集。另外注意,SAS中的if语句不带end。