1. cards与datalines
如果输入数据中含有分号,可用cards4语句或datalines4语句,同时,数据结尾用4个分号表示数据输入结束。 Cards4例
data;
input number citation $50.;
cards4;
1 Berry
2 LIN ET AL., 1995; BRADY, 1993
3 BERG, 1990; ROA, 1994; WILLIAMS, 1992
;;;;
run;
2. Transpose
用过SPSS的人都知道,SPSS的数据转置功能还是很强大的,而且很直观,那么SAS呢?想必SAS那么强大的统计软件也不会落后的。 TRANSPOSE这个功能就可以完成转置功能。TRANSPOSE过程将一个数据集进行转置,使行变为列而列变为行,也就是使原数据集中样品的观测值变换成新数据集中变量的观测值,而原数据集中变量的观测值则变换成新数据集中样品的观测值。 TRANSPOSE过程的格式如下所示:
PROC TRANSPOSE <DATA=input-data-set> <LET> <NAME=name> <OUT=output-data-set> <PREFIX=prefix>;
BY <DESCENDING> variable-1 <...<DESCENDING> variable-n> <NOTSORTED>;
COPY variable(s);
ID variable;
IDLABEL variable;
VAR variable(s);
在PROC TRANSPOSE语句中可能出现的选择项有:
1)DATA=数据集名,用来说明要转置的数据集名,如果省略这一选择,则指定最新建立的数据集。
2)OUT=数据集名,用来说明转置所建立的新数据集名,如果省略这一选择,SAS将按内部程式给出新的数据集名。
3)LET 当ID出现重复时,那么只选用最后一条
4)NAME=字母 为含有输入数据集中被转置的变量名的输出数据集中的变量命名,如果省略这一选择,SAS将按内部程式指定为_NAME_。
5)PREFIX=字母(指定一个前缀,用来构成新变量名)。
BY语句 使输入数据集分组转置,分组变量被包括在输出数据集中。
COPY语句 将变量复制到新的数据集中。
ID语句 用来指定转置后的变量名
IDLABEL语句 为转置后的变量名添加标签
VAR语句中应列出要被转置的变量名,否则原数据集中未在其他语句中列出的所有数值型变量都将被转置,字符型变量必须在VAR语句中列出才能被转置,未被转置的变量不进入新的数据集,除非它们已列入COPY或BY语句。公司注册资本登记制度改革
示例1:
data score;
input Student $9. +1 StudentID $ Section $ Test1 Test2 Final;
datalines;
Capalleti 0545 1 94 91 87
Dubose 1252 2 51 65 91
Engles 1167 1 95 97 97
Grant 1230 2 63 75 80
Krupski 2527 2 80 76 71
Lundsford 4860 1 92 40 86
McBane 0674 1 75 78 72
;
proc transpose data=score out=idlabel name=Test prefix=sn;
id studentid;
idlabel student;
run;
proc print data=idlabel label noobs;
title 'Student Test Scores';
run;
输出OUTPUT:
----------------------------------------------------
以前的变量名 Capalleti Dubose Engles Grant Krupski Lundsford McBane
Test1 94 51 95 63 80 92 75
Test2 91 65 97 75 76 40 78
Final 87 91 97 80 71 86 72
示例2:
data sale;
input salerid foodid money foodname $;
cards;
1 1 100 egg
1 2 300 cake
1 3 400 apple
2 2 230 cake
2 3 444 apple
2 4 540 pear
3 1 123 egg
3 2 120 cake
3 3 200 apple哈尔滨体育学院学报
3 4 500 pear
;
run;
proc transpose data=sale out=saleout name=Saler prefix=Food;
id foodid;
idlabel foodname;
by salerid;
run;
proc print data=saleout label noobs;
run;
输出OUTPUT:
----------------------------------------------------
salerid 以前的变量名 egg cake apple pear
1 money 100 300 400 .
2 money . 230 444 540
3 money 123 120 200 500
3. SAS对宏引用符号&、&&、&&&、&&&&的处理机制
SAS中通过&name引用一个宏变量name的值,但在实际编程中经常碰到诸如&&name&i甚至&&&的情况,初学者很容易被其迷惑,不过在了解SAS宏处理机制后,这个问题不难理解。例:
宏变量名 宏变量值
i 1
location beijing
name1 shanghai
name location
SAS宏处理器在读到SAS代码中的&时,会:
1、 向后继续读一个字符;
失依儿童2、 如果后面的字符也为&,则宏处理器将读到的两个&&并做一个&看待,然后转到步骤1;
3、 否则,将后面连续的非&字符(直到空格或&)做为宏变量名字符串。
新三国穿帮 对于&&name&i,解析流程如下:
计委大院&&name&i ——> (&&)name(&i) ——> &name1 ——> shanghai
对于&&&name,解析流程为:
&&&name ——> (&&)(&name) ——> &location ——> beijing
对于&&&&name,解析流程为:
&&&&name ——> (&&)(&&)name ——> &&name ——> (&&)name ——> &name
——> location
4. Frist 与 last的组合使用
在SAS环境里面,会使用first与last指令是很方便的事情。
因为常常会遇到要取次数、取第一笔数据、取最后一笔数据等问题,很难用SPSS去完成这样的动作科利华电脑家庭教师(会SPSS程序语言的人很少)。
今天要介绍的这两指令的基本款使用: