目录
过程中创建输出file/put对应从原始文件中读取数据infile/input
一、SAS基本设置
proc import
---
infile选项控制输入
FIRSTOBS= FIRSTOBS= 选项告诉SAS从哪一行开始读取数据,当数据开头有些说明信息,或者想要跳过某些行时,这个选项很有用。
OBS= OBS=告诉SAS一直读取到哪一行位置,注意是行而不是观测值(有的观测值占据多行)比如,如下的原始数据文件中,结尾处还有一句不需要的数据说明时。
<T123例题36>
sas遇到错误会怎么处理
数据错误:当sas遇到数据错误时候,缺失数据值以恰当的值代替,并继续执行程序。数据错误不会中止程序运行。
<T50例题49>
语法错误:程序将停止执行
sas系统选项optinos
OPTIONS语句 是SAS程序的一部分,并可影响之后的所有语句。由OPTIONS关键词开头,后面是相关选项。
OPTIONS语句既不属于数据步也不属于过程步,这个全局变量可以出现在程序的任何部分,但放在开头最有意义,你可以很容易看到哪些选项在发挥作用。如果OPTIONS语句只出现在数据步或者过程步中,那么它会影响那个过程。注意,后面的OPTIONS语句会覆盖前面的,即以后面的OPTIONS为主。
OPTIONS LINESIZE=80 NODATE;
options date;在报告中显示时间 <T123例题102>
FIRSTOBS= n选项告诉SAS从哪一行开始读取数据,当数据开头有些说明信息,或者想要跳过某些行时,这个选项很有用。
<T123例题2>、<T123例题6><T123例题100><T123例题103>
YEARCUTOFF
选项“yearcutoff=" 选项可以在100年的时间跨度内为任意两位年份值指定所属的世纪,
例如yearcutoff=1950表示50到99之间的两位年份值对应于1950到1999年而00到49之间的两位年份值对应于2000到2049年;
读取文件的input
input的应用详见:点击这里
贡献变量in选项
IN=*** 这个选项用来创建临时变量以追踪当前的观测是否来自该数据集。 |
<T123例题16>
put输入格式
data product;
date=put('13mar2019'd,ddmmyy10.);
date1=input('13mar2019'd,ddmmyy10.);
date3=input('13mar2019',ddmmyy10.);
date4=input('13mar2019',date9.);
date5=input('13032019',ddmmyy10.);
run;
运行结果:
date的长度是10个字节;
input输入日期时,输入格式必须和后面的格式相对应;
<T123例题81、83>
lable
data步里给变量加永久标签,proc步里用lable只在当前过程有效。
如:proc print语法如下:
PROC PRINT DATA=data-set;
SAS默认打印观测值数,noobs选项可以取消打印。SAS默认打印时用变量标签代替变量,用label可以改变取消标签:
PROC PRINT DATA=data-set NOOBS LABEL;
run;
proc print data=bank label;
labne var_name='tep_lable';
run;
<T123例题88>
二、函数
字符型函数
data work.AreaCodes;
Phonenumber=3125551212;
Code='('!!substr(Phonenumber,1,3)!!')';
run;
符号||、!!、¦¦,这三个符号都表示将字符串连接在一起。
data staff;
job="FA";
level="1";
job=job || level;
run;
此程序执行的结果,job的值依然是“FA”并不会成为“FA1”;
data test;
first='ipswich,englang';
city=substr(first,1,7);
city_country=city!!','!!'england';
run;
执行后city_country的结果是:ipswich ,england;长度23个字节;
<T50例题21><T123例题59><T123例题72>
循环函数
data work.inventory;
products=7;
do until (products gt 6);
products+1;
end;
run;
循环中do until先执行语句再进行判断;do while 先判断再执行程序;
<T50例题22>、<T123例题5>、<T123例题38><T123例题85、86>
data bank;
input name $ rate;
cards;
first 0.9
bank 0.98
distei 0.87
;
run;
data newbank;
do year=1 to 3;
set bank;
capital+5000;
/* output;*/
end;
run;
当data步中set语句在do循环里面,将会一条条输入数据,如上,如果循环里没有output则输出只有最后一条记录;
<T123例题87>
平均函数的变量简写
mean(of num1-num4);
条件判断IF/ELSEIF
<T123例题37> <T123例题39> <T123例题54><T123例题57->
数组命名方式
array name (n) $ variable-list;
·name是数组名称
·n为数组中变量个数,括号可以用{} 或者[]代替
·如果变量是字符且之前没定义,需要添加$
<T50例题23><T123例题44-47>
将字符型变量转换成数值型变量的方式:
data bonus;
infile 'file-specification';
input salary $ 1-7 raise 9-11;
newsalary=input(salary,comma7.) + raise;
run;
input语句将字符型变量salary变为数值型变量;<T50例题46>
put语句将数值变成字符变量;<T123例题82>
字符型和数值型变量相计算(加减乘除)
data retail;
cost='20';
total=.10*cost;
run;
total的值可以计算,total最终的计算值是2;<T123例题78>
data retail;
cost='$20,000';
dis=0.10*cost;
run;