众所周知,在我们进行数据处理分析的时候,不会是一直自己手动输入,这就要求从外部读取数据了。
下边我们讲解从txt文件中将数据读取出来。
我们读取的txt文件如下college_inf.txt:
depart_id name age major location
A101|cy|22|software1|beijing|
B101|ltt|23|software2|beijingj|
C102|zhq|24|software3|shijiazhuang|
D103|zhang|25|software4|baoding|
E104|hao|88|software5|hebei|
下面是用到的SAS文件:
/********************************************
Target:读取存储在本地磁盘的txt文档,并将其中的数据存储到数据集中。
By:yyx
********************************************/
%macro loadtxt(lib,txtpath,filename,tname);
data &lib..&tname;
length Location $15.;
infile "&txtpath./&filename..txt" firstobs=2 delimiter='|' ;
input
Depart_id $
Name $
Age
Major $
Location $
;
label
Depart_id = '公寓号'
Name = '姓名'
Age = '年龄'
Major = '专业'
Location = '所在地'
;
run;
%mend loadtxt;
%let lib=yyx;
%let txtpath=d:\SAS_test;
%let filename=college_inf;
%let tname=read_txt1;
%loadtxt(&lib,&txtpath,&filename,&tname);
程序解读:
%macro 和 %mend 用来定义SAS宏语句,利用 infile语句将数据文件中的额数据读取进入SAS。
input语句定义读取进入的字段和类型。缺省值是数字,$代表的是字符型。
label语句给input定义的字段起一个别名,容易记住的名字。
例如上边代码就是定义的宏loadtxt,这个宏就相当于我们在其他语言中的函数,方法,在用的时候直接调用即可。
其中的宏名字括号中的是宏的参数, 实际上, 这些宏参数都是一个一个的宏变量 。
lib:逻辑库的名字
txtpath:我们要读取的txt文件的存储路径。
filename:txt文件的文件名(不包含.txt后缀)。
tname:数据集的名字。
在这里还要注意一个地方:
SAS默认的读取数据的字段长度是8个字节,如果超过这个长度,需要在 input语句的前方说明一下。利用 length指定字段长度。这个程序中,我指定的Location的字段长度,是字符型数据,长度是15。
firstobs指定的是SAS读取数据时,从文件的第几行开始读取,默认的是1,我这里指定了2,因为第一行我放了字段名称。
delimiter指定导入数据的字段分隔符。可以简写成 dlm。
最后的 %loadtxt(&lib,&txtpath,&filename,&tname);就是调用上边我们写的宏。
下面是运行结果: