第二章 SAS语言基础(1)(2)

2019-01-10 12:43

所以要学习SAS,最首先要掌握的就是SAS程序的结构及运行机制,而其中最关键的又是data步的自循环,如果不能够理解这一点,那后面的内容就如空中楼阁,是不稳固的。

首先,数据步程序是一行一行的执行,这就意味着变量在使用之前必须创建。这一点很容易理解,几乎所有的语言都是如此。

其次,数据步程序是一个观测一个观测读取。当程序正确的执行到数据步的最后一个语句时,就将该次读取的一条观测写入数据集,然后又重新开始执行数据步,继续读取观测值,这就是数据步的自循环。也就是相当于数据步的最后隐含包括了两个语句,output与return语句。

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

第二个问题,在data步中间使用return语句会怎么样?自然是按照用户的意思进行执行,当遇到return语句时就重新执行数据步,读取下一条观测值,而跳过return后面的语句。

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

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

例子:

data equation;

do X = -10 to 10 by .01;

Y = 2*x**3 - 5*X**2 + 15*X -8; output; end; run;

symbol value=none interpol=sm width=2; title \proc gplot data=equation; plot Y * X; run;

2.数据类型(Data type):

我们在学其他编程语言的时候可能学到很多数据类型,但是SAS将各种各样的数据简化为两种类型,即数值型(numeric)和字符型(character)。那么这里就有问题了,像C语言那样丰富的数据类型而且实际上也存在各种类型的数据,SAS是如何处理的呢?这里就是SAS的特别之处了,两种基本的数据类型外加丰富的数据格式就能识别和显示各种各样的数据了,但是前提是你要告诉SAS怎么去识别和显示数据,按照什么格式去识别和显示数据,这里就涉及到SAS里面一个比较复杂的问题,数据格式,输入数据需要指明输入格式(informat),输出数据需要指明输出格式(format),这个内容请参看后面的有关章节,这里先了解一下。

另外一个问题,从数据类型角度我们把语言分为强类型的和弱类型,强类型的比方说C语言,在使用变量之前得先定义变量,而且必须指定一种数据类型。而SAS则是弱类型的,也就是在用使用变量之前是不需要定义的,变量的类型取决于数据的类型或者预先定义的格式。这个在后面的程序中可以更多的感受到。

3.变量(variable)

变量的命名规范跟其他语言基本相同,要以字母或下划线开始,不要使用系统保留的名称等;需要指明的是SAS的变量名是大小写不敏感的,最多32个字符,不像SPSS一样,SAS并不支持中文变量名,但是可以用变量标签(label)对变量进行说明,变量标签支持中文,最多256个字符。

下面主要讲解SAS比较特殊的内容。 3.1 变量的类型(type)

前面讲了SAS的数据类型只有两种,数值型和字符型,那么相应的变量类型也是两种,数值型变量和字符型变量。那么如何用这两种类型的变量去存储各种类型的数据?

前面一节提到SAS通过丰富的格式数据格式来识别和显示各种形式的数据,那么识别之后怎么存储呢?SAS有一套规则来将所有的数据转换成数值型或者字符型来存储,时间日期,货币数据都不例外。详细内容请参看后面有关章节。

3.2 变量的类型转换(Type Conversions)

对于变量类型之间(字符型与数值型)的转换,SAS有一套规则如下, ·如果字符变量与数值运算符在一起使用,则SAS将字符变量转换为数值; ·如果字符变量与数值变量进行比较符运算,则SAS将字符变量转换为数值;

·如果数值变量与字符运算符在一起使用,则SAS将数值变量转换为字符; ·如果在一个赋值语句中,左边跟右边的类型不一,则将右边的类型转换成左边的类型;

以上这些转换规则是SAS自动完成的,并且在LOG窗口中打印一个警告信息,指示这个转换发生的地方。以上这些情况在编程的时候最好是不要出现,因为虽然是自动完成,但是转换的结果不一定是我们预期的,比方说字符变量转换成数值时产生的是一个无效的数值,结果就造成了缺失值,当然SAS会在LOG窗口中提示出错信息,同时置自动变量_ERROR_的值为1。 3.3 如何创建变量?(Create Variables)

SAS是弱类型的语言,使用变量前不需要定义,可以在数据步中直接使用变量,当然更多的情形是在用input语句读取数据时。如果是要预先定义变量

的格式,则用format语句、informat语句、length语句或attrib语句都可以创建变量。

3.4 变量的属性(attribution)

通常说起变量,就是指变量的名称。其实变量名只是变量的属性之一。 打开一个数据集,然后选定任意一列,点击右键查看属性就会发现第一个选项卡是general,这个对话框里面的内容即为变量的属性,包括变量名、类型、标签、长度及其输入输出格式。

变量名用来标识变量,区分不同的变量;类型是指变量是字符型还是数值型;标签用来补充变量的信息,特别是SAS变量不支持中文命名的情况下可以将中文说明写在变量标签里;长度是变量所有容纳的最多字符的字节数或最大数值的字节数,在没有指定的情况下通常由input语句读取第一个观测值确定下来,当然可以用语句事先指定;输入输出格式用来输入输出数据,让SAS能对内部与外部的数据能实现转换。 3.5 变量列表(variable list)

在一个数据集中,变量按照第一次的出现的顺序(也就是在数据集中的顺序)被SAS系统存储为一个系列,这个系列就是一个完整的变量列表。而实际上我们在操作变量的时候只需要选取其中部分变量,而有了这个完整的变量列表就可以在许多语句中使用缩写的变量列表了。

在SAS中,可以使用4种缩写的变量形式: 数字系列

如果有一系列变量是这样定义的,相同的名字后面加上一个连续的数字,就可以采用数字系列的缩写,如

x1, x2, x3, …, xn可以缩写为 x1-xn (2)变量名系列

变量名系列就依赖于变量在SAS数据集中出现的顺序,如

x--a 就表示从x变量开始一直到a变量结束这一系列变量,结合自动变量就可以更加灵活的使用变量列表,如:

x-numeric-a 表示从x变量开始到a变量结束之间的所有数值型变量,x-character-a 表示从从x变量开始到a变量结束之间的所有字符型变量,

(3)前缀名系列

如果有一系列变量具有相同的前缀名,比方说SALES_JAN,

SALES_FEB, SALES_MAR… 则可以使用下面的形式表示这一系列变量名,

sales:

打印这些变量,则 proc print; var sales:; run;

对这些变量求和,则 sum (of sales:) (4)特殊的变量列表

包括三个自动变量代表的变量列表 _ALL_ 全部变量

_CHARACTER_ 全部字符型变量 _NUMERIC_ 全部数值型变量 3.6 自动变量(automatic variable)

自动变量是在程序中被SAS自动创建的变量,这些变量名有着特殊的用途,下面介绍一下在data步中的两个自动变量,过程步中的自动变量在具体的过程中讲解。

_N_

_N_ 在data步开始执行前被初始化为1,然后data步自循环一次该变量增加1,也就是_N_代表data步循环执行的次数。这个变量存在于每一个数据集中,但是一般不会显示也不会被打印。

_ERROR_


第二章 SAS语言基础(1)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:校长许祥源在首都师范大学建校50周年庆祝大会上的讲话

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: