众所周知,在我们进行数据处理分析的时候,不会是一直自己手动输入,这就要求从外部读取数据了。
下边我们讲解从txt文件中将数据读取出来。
我们读取的txt文件如下college_inf.txt:
1depart_id name age major location 2A101|cy|22|software1|beijing| 3B101|ltt|23|software2|beijingj| 4C102|zhq|24|software3|shijiazhuang| 5D103|zhang|25|software4|baoding| 6E104|hao|88|software5|hebei|
下面是用到的SAS文件:
1/******************************************** 2Target:读取存储在本地磁盘的txt文档,并将其中的数据存储到数据集中。 3By:yyx 4********************************************/ 5 6 7%macro loadtxt(lib,txtpath,filename,tname); 8 9data &lib..&tname; 10length Location $15.; 11infile "&txtpath./&filename..txt" firstobs=2 delimiter='|' ; 12input 13Depart_id $ 14Name $ 15Age 16Major $ 17Location $ 18; 19 20label 21Depart_id = '公寓号' 22Name = '姓名' 23Age = '年龄' 24Major = '专业' 25Location = '所在地' 26; 27run; 28 29%mend loadtxt; 30 31%let lib=yyx; 32%let txtpath=d:\SAS_test; 33%let filename=college_inf; 34%let tname=read_txt1; 35%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);就是调用上边我们写的宏。
下面是运行结果:
