《SAS统计分析实用宝典》学习摘要
一、赋值语句
在sas系统中,赋值语句用于将表达式计算的值赋予指定的变量,其调用的基本格式为:
变量 = 表达式
其中,变量可以是一个sas系统中已经存在的变量而对其原值进行覆盖,也可以是用户在此新建的一个变量;但需要注意的是右边表达式中所有涉及的变量均要是已经存在的且已经被赋值的变量。
如在Note3中的语句:
avg = (math+chinese+english+physics+chemistry)/5;
二、input 语句
input 语句用于向sas中读入数据的模式限制,有列表模式和列模式两种。
1、列表模式
列表模式的Input语句基本格式:
input 变量名[$] [选项] [@/@@]
- 变量名:为人为设定的数据各列的名称。
- [$]:表示如果该列(字段)是字符串类型的则要在变量名后加上美元号。
- [选项]:可用于设置输入数据的格式。
- input语句由于是在代码界面输入数据的,故其默认的变量分隔符为空格(因为输入时可以人为输入),对于其他分隔符(逗号,制表符等),需要通过infile语句进行设置,设置的方式为“ infile 文件路径 dlm = ‘分隔符’ ”或“ infile cards dlm = ‘分隔符’”。
- 读取的字符型数据的默认长度为8个字符,如果超过,则需要通过length语句来定义其长度,格式为:" length 变量名$长度 ".
- @/@@: 符号@表示一个数据行仅读取一个数据观测,系统输入完所有变量后会自动转入下一数据行进行数据读取,是sas的默认选项;而符号@@表示一个数据行可以读取多个预测。
input 列表模式输入数据
title 'test';
data test;
input name$ price @@; /*列表模式,数据行有多个观测*/
cards;
香蕉 2 苹果 5 橘子 4
芒果 4 西瓜 10 柠檬 7
;
proc print data = test;run;
title 'test2';
data test2;
input name$ price @; /*列表模式,数据行有多个观测*/
cards;
香蕉 2 苹果 5 橘子 4
芒果 4 西瓜 10 柠檬 7
;
proc print data = test2;run;
生成的两个数据集在数据步中的不同在于前者是@@,后者是@,生成的结果如下图:
2、列模式
对于没有固定分隔符的数据,如果已经按列排列好,不同观测的各变量均从相同的列开始,即可使用列模式的数据输入方式。基本格式:
input 变量名1 [$] 起始列数-终止列数 变量名2 [$] 起始列数-终止列数 变量名3 [$] 起始列数-终止列数 ……变量名n [$] 起始列数-终止列数;
例 - input 列模式输入数据
data test3;
input city$ 1-10 zip 12-17;
cards;
Birmingham 35201
Montgomery 36101
Huntsville 35801
Tuscaloosa 35401
Mobile 36601
;
proc print;run;
结果如下图:
上例如果使用列表模式输入数据,则会因为地方字符串长度大于8位而有缺失:
data test4;
input city$ zip ;
cards;
Birmingham 35201
Montgomery 36101
Huntsville 35801
Tuscaloosa 35401
Mobile 36601
;
proc print;run;
结果如下:
这可以用length语句进行改正到和列模式相同的效果。
三、infile 语句
基本格式:
infile 文件路径 [选项];
- 文件路径一般包含文件完整路径和文件名,如果是默认文件路径,系统将在当前路径下寻找“文件名”的数据文件。
- 选项可用于对输入数据的基本格式进行设置,其中delimiter用于设置分隔符,默认为空格。
infile语句示例
设一txt文档有如下内容:
1,2,3,4,5,6,7,8
data test5;
infile 'F:\test5.txt' delimiter = ',';
input x y @@;
put x= y=;
run;
结果如下:
x=1 y=2
x=3 y=4
x=5 y=6
x=7 y=8
如果想在内部代码中更改间隔符
可以使用:infile cards dlm=’;'来进行读取。
data test5;
infile cards dlm = ',';
input x y @@;
cards;
1,2,3,4,5,6,7,8
;
proc print;
run;
结果如下:
四、put 和 file 语句
put 和 file语句主要用于在sas系统中数据步数据的输出。
1、put语句将数据输出到日志窗口
put 变量名;
同时,也可以选择显示变量名的形式:
put 变量名=;
加上变量名的put语句的输出将会是“变量名=变量值”的形式。
此外,put语句还可以指定输出变量在窗口中显示的列数,例如“put x 5-10”将在日志窗口的第5-10列显示变量x的值。
put 语句的使用
data;
x = 3;
y = sin(x)+1;
put x;
put x y;
put x=;
put x= y=;
put x 5-10;
run;
在日志窗口中的结果如下:
3
3 1.1411200081
x=3
x=3 y=1.1411200081
3
2、file语句
file语句需要与put语句联合使用,可以把数据步中的数据输出到结果窗口或外部文件中,基本格式如下:
file print [选项];
file '文件路径' [选项];
其中:第一种格式的file语句用于指示sas系统的put语句将结果输出到结果窗口中;第二种格式的file语句可以让put语句将结果输出到外部文件中.
file语句输出到结果窗口
data test6;
file print;
do i = 1 to 5 by 1;
x = i*i;
put i= x=;
end;
run;
filey语句输出到外部文件中
data test6;
file 'F:\test6.txt';
do i = 1 to 5 by 1;
x = i*i;
put i= x=;
end;
run;
五、length 语句
在sas数据步中,length语句用于定义变量的长度,其基本格式为:
length 变量名[$] 变量长度;
数值型变量可以设置的长度为2 ~ 8,字符型变量可以设置的长度为1 ~ 32767。
在sas系统中,length语句主要用于设置字符型变量的长度,因为系统默认长度为8,字符型变量十分容易超过这个限定,尤其中有中文的情况下。
length 语句使用示例
data test7;
input name$ number;
cards;
Willia,Edwards 1001
Greg,Curran 1002
Moore 1003
;
proc print;
data test8;
length name$ 20;
input name$ number;
cards;
Willia,Edwards 1001
Greg,Curran 1002
Moore 1003
;
proc print;
run;
结果如下:
六、label 语句
为了可以更好地说明sas输入的数据,用户可以通过label为输入的变量加上标签。标签的内容可以是中文字符,格式如下:
label 变量名1 = 标签名1 变量名2 = 标签名2 ...;
通过label可以为变量加上标签,同时,当为变量的标签名赋值为空时,可以删去变量的标签。
label 语句的示例
data test8;
length city$ 10;
label city = '城市' zip = '邮编';
input city$ zip;
cards;
Birmingham 35201
Montgomery 36101
Huntsville 35801
Tuscaloosa 35401
Mobile 36601
;
proc print;run;
七、keep 语句
keep语句可用于变量的选择,对于sas数据集中的变量,可以通过keep语句保留需要使用的变量,而对于暂时不需要使用的变量可以予以删除,基本使用格式如下:
keep 变量名1 变量名2 ...变量名n;
keep 语句示例
data test9;
x = 3;
y = sin(x) + 1;
z = x + y;
keep x y;
run;
建立的数据集中仅保有x和y。
八、drop 语句
drop与keep语句起到相反的效果,基本格式:
drop 变量1 变量2 ... 变量n;
drop 语句示例
data test9;
x = 3;
y = sin(x) + 1;
z = x + y;
drop z;
run;
效果与keep示例一样。
九、where 语句
keep和drop语句可以实现sas中数据集中变量的选择,而where可以实现数据集中观测的选择,用户在分析中可能只对一部分样本进行分析,where语句可以用于选择符合一定条件的观测,调用格式如下:
where 表达式;
其中的表达式为观测的选择条件。
where 语句示例
where x > 100;
where x between 100 and 200;
where x in (10,20,30);
where x > 100 & y > 100;
来源:CSDN
作者:不战二白
链接:https://blog.csdn.net/weixin_43210958/article/details/103972024