首页 > 代码库 > 【SAS BASE】处理数据集
【SAS BASE】处理数据集
本节内容包括:SET语句、MERGE语句、UPDATA语句、OUTPUT语句、TRANSPOSE语句和data-set选项及SAS Automatic Variables
一、SET语句(堆叠功能)
- 用SET语句修改数据集
DATA Friday; SET Sales;/SET ‘C:\MySASLIB\trains.dat‘; IF DAY=‘F‘; Total=Propcorn+peanuts;/*建立新的变量*/RUN;
- 用SET语句堆叠(stack)数据
1 DATA BOTH;2 SET Southerntrance Northerntrance;3 RUN;
- 用SET语句Interleaving数据集:不仅堆叠在一起,还按照BY变量排序
1 DATA interleave;2 SET Northerntrance Southerntrance;3 BY passnumber;4 RUN;5 /*注意:用于堆叠的数据集必须要预先根据BY变量排序*/
- Combing a Grand Total with the Original Data
1 *省略DATA步; 2 PROC MEANS NOPRINT DATA=http://www.mamicode.com/shoes; 3 VAR Sales; 4 OUTPUT OUT=Summarydata SUM(Sales)=GrandTotal; 5 /*MEANS过程生成一个含有总和的新数据集,但是无法与原始数据匹配,因为没有共同的变量*/ 6 PROC PRINT DATA=http://www.mamicode.com/Summarydata; 7 TITLE ‘Summary Data Set‘; 8 RUN; 9 10 *Combing a GrandTotal with the original data;11 DATA Shoesummary;12 IF _N_=1 THEN SET Summarydata;/*Summarydata数据集观测数为1*/13 SET shoes;/*原始数据的观测数超过1*/14 PERCENT=sales/Grandtotal*100;15 RUN;16 /*与RETAIN语句的效果类似*/
二、MERGE语句(匹配功能)
- One to One Match Merge
1 DATA Cholocates;2 MERGE sales descriptions;3 BY codenum;4 RUN;5 【NOTICE】:6 1.在MERGE之前要预先按BY变量排序;7 2.若两个数据集有相同名字的非BY变量,则后面的会覆盖前面数据集。
- One to Many Match Merge(用data-set-1的一个观测时匹配data-set-2的多个观测,原理与One-to-One一样)
- Mering Summary Statistics with the Original Data
1 step1: 利用PROC MEANS归纳数据,并将输出放入新数据集中;2 step2: 将新数据集与原始数据集匹配。
三、Data-set Options(最常用的帮助处理数据集的选项)
1 KEEP=variable-list;2 DROP=variable-list;3 RENAME=(oldvar=newvar);4 FIRSTOBS=n;5 OBS=n;6 LABEL=‘data-set-label’;7 IN=new-var-name;*creating a temporary variable for tracking whether that data set contributed to the current observation;8 WHERE=condition;
【备注】:IN=variable为临时变量,仅在当前DATA步存在,值为0或1。
四、用UPDATE语句更新主数据集
1 DATA perm.patientmaster;2 UPDATE perm.patientmaster transactions;3 *解释:---------主数据集-----------更新数据集---;4 BY Account;5 RUN;6 【NOTICE】:7 更新数据集的缺失值不会覆盖前一个主数据集;8 主数据集中的BY变量的值必须是unique;
五、OUTPUT语句
- 将一个数据集横向分为多个数据集(若仅用DATA步,(例如:DATA Lions Tigers Bears;),导出来的数据集是一样的)
1 DATA Moring Afternoon;2 INFILE ‘C":\MyRawdata\zoo.dat‘;3 INPUT Animal $ 1-9 Class $ 11-18 Enclosure $ Feedtime $;4 *省去数据部分;5 IF FeedTime=‘am‘ THEN OUTPUT Moring;6 ELSE IF Feedtime=‘pm‘ THEN OUTPUT Afternoon;7 ELSE IF Feedtime=‘both‘ THEN OUTPUT;/*输入到两个数据集中*/8 RUN;
- 将一个数据集的一行观测分为多个
1 DATA Theaters; 2 INFILE ‘C:\MyRawData\movies.dat‘; 3 INPUT Month $ Location $ Tickets @; 4 OUTPUT; 5 INPUT Location $ Tickets @;/*因为没有遇到第二个input语句,此时Month还停留在上一句的Month处*/ 6 OUTPUT; 7 INPUT Location $ Tickets; 8 OUTPUT; 9 RUN;10 /*此program将每个观测(7列),拆成三行(每行三列,且没三行都以第一行的Month的值为准)*/
六、TRANSPOSE语句(将观测与变量互换)
1 PROC TRANSPOSE DATA=http://www.mamicode.com/baseball OUT=flipped;2 BY Team Player;/*Grouping variable*/3 ID type;/*ID 语句names the variable whose formatted values will become the new variable names;若为数值型的,则新变量名会有一个下划线前缀;ID变量的值必须是Unique*/4 VAR Entry;/*想要transpose的变量*/5 RUN‘
七、SAS Automatic Variables
1) _N_ :DATA步中SAS的循环次数;2)_ERROR_:取值0(无错误)和1(有错误);3)FIRST.variable:当SAS在读取该变量时,首次出现一个value,则为1,否则为0; LAST.variable:当SAS在读取该变量时,最后出现一个value,则为1,否则为0;【注意】:FIRST.variable和LAST.variable:仅在DATA步中用了BY语句才有些。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。