今天做了几个练习,主要是用不同的几种方式读取txt文档
实例1 读取文本中的数据
C盘下需要建逻辑库mydb,测试txt也放进去,用户路径下还需要存放数据文本,这个地方得注意下,否则提示物理文件错误,但是不明白为什么要在两个地方指定逻辑库,都存放数据文本呢???
libname temp 'C:\temp';
%let f1='C:\temp\abc.txt'; #%宏变量,这里用了宏替换
filename fil '(&f1)'; #可以简写为filename fil 'C:\temp\abc.txt' 这样比较简单,不要用宏变量了
data temp.hw;
infile fil; #从fil中读
input h w; #数值型,8位
run;
proc_print data=temp.hw;
run;
实例2 直接导数
C\用户\xh\C\mydb\test.txt
M 50 68 156
F 52 45 154
data demographics;
infile 'C\mydb\test1.txt';
input gender $ age height weight;
run;
proc print data=demographics;
run;
在做这个练习时,总是提示文本物理文件不存在,检查了好久,发现,应该在本机C盘用户上新建一个C,在这个C下新建逻辑库,然后将文本也放到这个逻辑库下,文本直接命名不要加.txt
实例3 列指针控制读取
aaa111111bbbb
ccc222222dddd
eee333333ffff
libname mydb 'C:\mydb';
filename fin 'C:\mydb\test3.txt'; #指定时不喜欢用指针,直接指定方便
data test;
infile fin;
input
@1 x1 &3. #从第一个字符开始读,字符型的,长为3个字符
@4 x2 6. #从第四个字符开始读,默认为数据型的
@10 x3 $4.
;
run;
proc print;
run;
实例4 列控制符号
aaa111111bbbb
ccc222222dddd
eee333333ffff
libname mydb 'C:\mydb';
filename fin '(C:\mydb\test3.txt)';
data test;
infile fin;
input
x1 $1-3 #x1变量为字符型,从第一列到第三列
x2 4-9
x3 $10-13
;
run;
proc print;
run;
实例 5 分隔符
aaa,111111,bbbb
ccc,222222,dddd
eee,333333,ffff
libname mydb 'C:\mydb';
filename fin '(C:\mydb\test4.txt)';
data test; #建立在word逻辑库下的数据集
infile fin dim=','; #以,作为分隔符读
input x1 $ x2 x3 $; #用input 读
run;
proc print;
run;
实例6 向外部文件写
data_null_;
set mydb.student; #指定要读的是mydb逻辑库下的数据集student
file 'C:\mydb\stu1.txt'; # file指定往哪里写
put id name $ sex $ score; # put往里写
run;
实例7 产生数据集temp 的同时,为其增加变量class,当x>50时令class=1,否则class=2
data temp; #在work 库中建立数据集temp
input x y@@; #采用数据连续读入方式
if x>50 then class=1;
else class=2;
cards; #数据块
34 56 78 90 35 67 89
;
proc print;
run;