DATA步
-
不带参数
data语句可以不带任何参数,这样产生的结果就是将所产生的结果存放在临时库work中,并且以DataX标识,X为从1开始递增的自然数。
data ; x=1; y=2; z=3; run;
NOTE: 数据集 WORK.DATA1 有 1 个观测和 3 个变量。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.23 秒 CPU 时间 0.01 秒
一般来这种方式都是在只考虑结果因素所使用的。 -
数据追踪
虽然在执行时生成的数据文件名字不是自己定义的,我们也依然可以SAS系统宏变量&syslast来跟踪。proc datasets nolist; delete %scan(&syslast,2); quit;
NOTE: 正在删除 WORK.DATA2 (memtype=DATA)。 NOTE: “PROCEDURE DATASETS”所用时间(总处理时间): 实际时间 2.20 秒 CPU 时间 0.39 秒
-
参数 _null_
如果不想在执行后保存任何的数据,data语句后面需要添加_null_data _null_; x=1; y=2; z=3; run;
NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.01 秒 CPU 时间 0.00 秒
-
数据输出到多个数据表中
data da1 da2; x=2;y=5;z=8; run;
NOTE: 数据集 WORK.DA1 有 1 个观测和 3 个变量。 NOTE: 数据集 WORK.DA2 有 1 个观测和 3 个变量。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.32 秒 CPU 时间 0.03 秒
-
数据输出到2个不同的数据集
data da1 da2; x=1 y=2 z=3; run;
NOTE: 数据集 WORK.DA1 有 1 个观测和 3 个变量。 NOTE: 数据集 WORK.DA2 有 1 个观测和 3 个变量。 NOTE: “DATA 语句”所用时间(总处理时间): 实际时间 0.32 秒 CPU 时间 0.03 秒
-
数据纵向分解
data dada(keep=x) papa(keep=y z); set work.Data1; run;
内嵌数据行或者外部数据文件
常规数据
文件数据的应用可以使用input配合datalines使用。
PS:cards===datalines===lines
libname mylib "d:\mylib";
data mylib.myclass;
input name$ sex$ age;
cards;
xiaoming m 18
xiaohong f 17
xiaolong m 18
run;
proc print;run;
36 libname mylib "d:\mylib";
NOTE: 已成功分配逻辑库引用名“MYLIB”,如下所示:
引擎: V9
物理名: d:\mylib
37 data mylib.myclass;
38 input name$ sex$ age;
39 cards;
NOTE: 数据集 MYLIB.MYCLASS 有 3 个观测和 3 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.00 秒
43 run;
44 proc print;run;
NOTE: 从数据集 MYLIB.MYCLASS. 读取了 3 个观测
NOTE: “PROCEDURE PRINT”所用时间(总处理时间):
实际时间 0.01 秒
CPU 时间 0.00 秒
例外
- 如果datalines中的数据用某些符号隔开,比如“,”
我们可以在input前加一句话
infile datalines delimiter=',';
- 还有一种特殊情况,就是datalines中的数据是由字符“;”隔开的,
那么我们就需要把数据集的开头改成datalines4(或者cards4,lines4),
然后以“;;;;”结尾即可。 - 另外,如果出现“”,配合dsd风味更佳哦~
- 如果datalines在同一个数据行下有多个观测,那么需要在input的最后加上@@作为提示。