现在的位置: 首页 > 综合 > 正文

《SAS编程与数据挖掘商业案例》学习笔记之八

2018年05月10日 ⁄ 综合 ⁄ 共 2503字 ⁄ 字号 评论关闭

十:file语句

file中的option选项:

Dlm=              指定列表输出文件的分隔符,默认是空格

Dropover      规定当输出数据行长度超过指定值时,忽略超出部分

Flowover    规定当输出数据行长度超过指定值时,超过部分在下一行输出

Dsd   规定一个数据项可以包含分隔符,但是要用引号括住  默认分隔符是逗号

Encoding=  指定输出外部文件所用编码

Filename=   定义一个临时变量,用于接收put语句打开的文件名,默认长度为8

Filevar=    定义一个临时变量,file语句根据其值变化关闭当前输出文件并在下一次file语句执行时打开新的输出文件,长与input语句连用  
Lrecl=  
 输出文件的逻辑记录长度

Mod  把输出行输出到文件中已经存在的行的后面

Old      替换文件原有的内容

eg

filename file 'f:\data_model\book_data\chapt3\utf.txt';

data _null_;

set sashelp.class;

file file encoding='utf-8';

put name weight;

run;

file语句最简单的形式,输出两个变量到新的文件中

eg2

filename files 'f:\data_model\book_data\chapt3\filename.txt';

data a;

length temp $50;

file files filename=temp;

put 'abc';

fname=temp;

run;

输出两个文件,一个是sas数据集a,一个是文件文件filename.txt

其中数据集a中只有fname一个字段,其值为filename对应的文件名

put语句后面的内容为输出文件的内容,所以数据filename.txt中只有abc

 

eg

data b;

length name $200;

input name;

name='f:\data_model\book_data\chapt3\'||strip(_infile_)||'.txt';

file anyname filevar=name ;

date=date();

n=name;

format date yymmdd10.;

do;

put 'test' @;

put ',' @;

put date ;

end;

cards;

test_file1

test_file2

test_file3

;

run;

解读:通过filevar选项的控制同时输出多个外部文件,并把外部文件名输出给sas数据集

蓝色部分为数据集b 的内容,黄色部分中put语句后面的为三个文件输出的内容;

cards读入数据后,自动变量_infile_都会自动获取相应的值,第一条记录读取时,test_file1被传送到_infile_变量中,从而filevar变量的值为f:\data_model\book_data\chapt3\test_file1.txt,然后赋值给n

 

如果仅仅是读取某一目录下所有外部文件名到另一个文本文件下,只需要如下代码。

data _null_;

do i=1 to 3;

length name $200;

name='f:\data_model\book_data\chapt3\'||'test_file'||put(i,1.)||'.txt';

file anyname filevar=name ;

file 'f:\data_model\book_data\chapt3\fname.txt';

put name;

end ;

run;

 

商业实战:

输出定长文本文件

data _null_;

    set sashelp.class(keep=name sex) nobs=obs end=last;

date=date();

    file "f:\data_model\book_data\chapt3\test1.txt"  dropover lrecl=32767 ;

    if _n_=1 then                     

    do;

        put 'header'  @;

        put date @;        format date yymmdd10.;

        put obs z8.;

    end;

    do; 

        put name $ 1-10 @;

        put sex $ 15-16 ;

        ;

    end;

    if last then do;

        put 'end';

    end;

run;

 

集中输出方式:

列方式输出:在put语句后要紧跟列号,对字符型要加$,put
name $1-8

 列表方式输出(自由格式):只是在put语句后列出变量名,当然字符型要外加$,put
name $ age

格式化方式输出:在put语句后要指明输出格式,输出格式同事指明数据类型和列宽度,最后要加一个句点结尾。

put name  $8. age  4.

 

输出含有逗号不定长文本文件:

libname chapt3 'f:\data_model\book_data\chapt3';

data _null_;

    set chapt3.file_put1;

    file "f:\data_model\book_data\chapt3\test2.txt"  dropover lrecl=32767 dsd dlm=",";

    do; 

        put firstname  @;

        put id  @;

        put phonenumber ;

    end;

run;

 

输出定长且含有逗号的文本文件

data _null_;

    set chapt3.file_put2;

    file "f:\data_model\book_data\chapt3\test2.txt" dropover lrecl=32767 ;

    do; 

        put firstname $10. @;

        put "," @;

        put id $3. @;

        put "

抱歉!评论已关闭.