《SAS编程与数据挖掘商业案例》学习笔记之八
十: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 "
總結
以上是生活随笔為你收集整理的《SAS编程与数据挖掘商业案例》学习笔记之八的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据挖掘算法之决策树算法总结
- 下一篇: 数据挖掘的十种分析方法