Saturday, March 22, 2014

SAS Base Tips

SAS分为data step和proc step。data setp只要求以data开始,没有其他限制;而proc step则更像一个模板,每一个过程有确定可用的语句,用户根据需要往上面填写。Proc step几乎没有任何的技巧可言,Proc step应用的好坏一方面取决于你前面数据处理的好坏,另一方面取决于用户的统计基础,sas大多的技巧都集中在Data step。


Data step流程结构:每一种结构化语言编写的程序都由由顺序、选择、循环三种结构构成。

SAS语言在以下一些方面跟标准语言有比较大的差异:
·循环与自循环:Data step隐含了自循环的过程,这一SAS语言最具特色的机制在方便编程的同时也带来了理解上的麻烦;
·数据类型:只有两种类型,Character and numerical 识别和显示更多的数据形式依靠丰富的输入输出格式;
·数组:只用来存储变量,而不是具体的数据;
·函数:有着丰富的函数库,特别是统计相关的函数,但是没有提供自定义函数,实现这一功能的是宏;
·程序结构:任意一个SAS程序都是由Data step或proc步构成的,模块化的结构使程序看起来非常清晰。
SAS语言的这些特点使其更适合用来解决统计分析问题。

一、Data step的自循环(Data step's Built-in Loop):
1、Data step程序是一行一行的执行,这就意味着变量在使用之前必须创建。
2、Data step程序是一个观测一个观测读取。当程序正确的执行到Data step的最后一个语句时,就将该次读取的一条观测写入数据集,然后又重新开始执行Data step,继续读取观测值,这就是Data step的自循环。也就是相当于Data step的最后隐含包括了两个语句,output与return语句。

a.读取的数据在执行到最后写入数据集之前保存在哪里?
input语句执行后,SAS将读取的数据暂时先保存在内存缓冲区,然后执行后面的语句,后面的语句可以对暂存在内存缓冲区中的变量值进行修改,到最后才将整条数据写入数据集,写入数据集的数据就不能在当前Data step中再修改。

b.在Data step中间使用return语句会怎么样?自然是按照用户的意思进行执行,当遇到return语句时就重新执行Data step,读取下一条观测值,而跳过return后面的语句。

c.在Data step中间使用output语句呢?那么程序会在执行到output语句那里就把放在内存缓冲区里面的观测值写入数据集,而不是等到整个Data step执行完了再写入。

弄清楚这三个问题了应该弄明白Data step的自循环是怎么回事了。而且会发现原来Data step不一定是一次只可以读取一条观测,完全可以两条或者更多条一次的读取,比如重复input语句,并且在每条语句之后加一条output语句,就可以实现了。

二、数据类型(Data type):
SAS将各种各样的数据简化为两种类型,即数值型(numeric)和字符型 (character);
SAS的特别之处在于,两种基本的数据类型外加丰富的数据格式就能识别和显示各种各样的数据了,但是前提是你要告诉SAS怎么去识别和显示数据,按照什么格式去识别和显示数据,输入数据需要指明输入格式(informat),输出数据需要指明输出格式 (format)。

从数据类型角度我们把语言分为强类型的和弱类型,强类型的比方说C语言,在使用变量之前得先定义变量,而且必须指定一种数据类型。而SAS 则是弱类型的,也就是在用使用变量之前是不需要定义的,变量的类型取决于数据的类型或者预先定义的格式。
a. 字符常数(character)
如果带引号,则用不同引号引用,或将引号重复一次即可(用相同引号时)
b. 数值常数(numeric)
数值常数就是指在SAS语句中的数字,可以包含数字、小数点、符号和特殊记号E,如,1, -5, +49, 1.23, 01, 1.2E23, 0.5E-10等等
注意:若一个数值常数大于10E32-1,则必须表示成科学计数法。
c. 其它常数(data, time, and datetime)

''fmt
变量的类型转换(Type Conversions)
对于变量类型之间(字符型与数值型)的转换,取决于变量所在表达式的运算规则。
以上这些转换规则是SAS自动完成的,编程的时候最好是不要出现,因为虽然是自动完成,但是转换的结果不一定是我们预期的。

变量列表(variable list)
在SAS中,可以使用4种缩写的变量形式:
(1)数字系列:x1-xn;(2)变量名系列:x--a;(3)前缀名系列:item:。(4)特殊的变量列表:_ALL_,_CHARACTER_,_NUMERIC_。

三、数组

四、选择与循环
用于控制各计算操作执行的次序。
a.选择结构:if then else;select when otherwise end;
b.循环结构:do while end;do until end;步长型循环结构;特殊的循环结构;do over end(用于数组);
c.语句块:do end;
d.跳出:continue;leave;return;go to(一般少用,跳出多层循环);

五、sas视图界面
项目管理的功能,它可以将整个分析过程存储为项目文件供以后使用,包括数据集的路径、所执行的代码、相应的统计分析结果和统计图表等元素。有些功能目前只有在Analyst中提供而没有相对应的过程,如样本含量的估算和检验效能的计算等。
SAS网站上的支持服务中心

No comments:

Post a Comment