; *命名方式输出,输出结果会带等号;
file语句
filename Outfile 'C:\Users\Administrator\Desktop\sas-test\utf.txt';*定义输出的文件名和路径,本来打算用outputfile来定义filename的,结果编译失败,应该是名字过长的原因;
*filename只能定义一个输出文件;
data _null_;
set sashelp.class;
file Outfile encoding='utf-8'; *定义输出的编码格式;
put name weight; *file一般和put连用,put语句会把后面的变量put进文件中;
run;
data a;
length temp $50; *规定文件名长度,不然会输出过短,系统默认字符长度只有8位;
file Outfile filename=temp; *filename=选项获取文件名的字符串;
put 'abc'; *输出abc到outfile中;
fname = temp; *a只有一个变量,fname;
run;
*动态定义多个输出文件;
data me;
length name $200;
input name;
*其机制和set语句相同,input执行时,跳转到cards语句,按你定义的方式读取input后面的变量的值,这里是整行整行读取,读取玩一行后跳转到input的下一行;
name='C:\Users\Administrator\Desktop\sas-test\'||strip(_infile_)||'.txt';
/*_infile_和_N_一样是自动变量,可以认为后者是观测值序号,前者是观测值 _infile_是当前pdv中的所有值
In a DATA step, if the STRIP function returns a value to a variable that has
not previously been assigned a length, then that variable is given the length of the argument
说白了就是去前后空格的意思,好让文件名路径正确*/
file anyname filevar=name;
date =date();
n = name;
format date yymmdd10.;*固定date的输出格式;
do; *do end循环输出内容到文件中;
put 'test'@;
put ','@;
put date;
end;
cards;
test_file1
test_file2
test_file3
;
run;
/*输出数据集到文件,添加表头和尾,并规定输出格式*/
data _null_;
set sashelp.class(keep = name sex) nobs=obs end=last;
file 'C:\Users\Administrator\Desktop\sas-test\test.txt';
date = date();
if _n_ = 1 then
do;
put 'header '@;
put date @; format date yymmdd10.;
put obs z2.;
end;
do;
put name $ 1-10 @;
put sex 15-16;;
end;
if last then do;
put 'end';
end;
run;
data _null_;
set chapt3.file_put1;
file 'C:\Users\Administrator\Desktop\sas-test\test.txt' dropover lrecl=32767 dsd dlm=';'; *dlm选项是分隔符,代表输出文件用到的分隔符 dsd表示将变量本身包含的一些敏感符号用双引号括起来,以免和分隔符发生冲突;
*不定长输出;
do;
put firtname @;
put id @;
put phonenumber ;
end;
put firstname $10. @;
put ','@;
put id $3. @;
put ',' @;
put phonenumber 8.;
end;
run;
data a;
infile datalines missover; *missover是缺失值的解决发难,会在相应的位置上打点;
input x1-x4; *infile中 dsd除了和file中的dsd意思一样还默认用逗号为分隔符;
datalines;
97.2 98.2
96.5 9 5 4
4 2 41 5
run;
几个选项的解释 lrecl规定文件的逻辑记录长度,也就是一行的长度。