日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sas infile和filename

發(fā)布時間:2023/12/2 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sas infile和filename 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
3.1 追加原始文件
原始數(shù)據(jù)可以使用以下的方法進行縱合并。
  • INFILE語句
  • FILENAME語句
  • FILEVAR=選項
  • 操作系統(tǒng)自身的技術
    首先,你可能要察看原始數(shù)據(jù)。可以用FSLIST過程。
    語法:
    PROC FSLIST FILE = file-specification;
    RUN;
    實際使用中,專門的編輯器,如UltraEdit之類的小軟件,用來察看原始文件有著更多的便利。
    INFILE
    為了讀取多個原始文件,可以使用多個INFILE語句。這樣數(shù)據(jù)步會從第一個文件中讀出一條記錄,再到第二個文件讀一條記錄,以此類推,讀完所有文件再返回第一個文件。如下圖所示

    FILENAME
    你也可以使用FILENAME語句,對原始文件進行串聯(lián)。如下圖所示:

    FILENAME語法如下:
    FILENAME fileref ('external-file1'
    'external-file2' … 'external-filen');
    其中fileref是任何8位或以下的有效SAS名稱。
    'external-file' 是數(shù)據(jù)文件的物理名。
    例如:
    filename Q1 ('Month1.dat' 'Month2.dat' 'Month3.dat');
    data firstq;
    infile Q1;
    input Flight $ Origin $ Dest $
    Date : date9.
    RevCargo : comma15.2;
    run;
    FILEVAR=
    使INFILE語句的FILEVAR=選項,它可以幫助你有條件的連接多個原始文件,如下圖所示:

    語法:
    infile xxx filevar = NextFile;
    xxx 是任意的8位或以下的占位名,不是一個實際的文件名或者定義好的文件引用。SAS使用這個占位名在日志中報告處理信息。
    NextFile 存放原始數(shù)據(jù)文件名的變量。
    例如:
    data movingq;
    do I = 11,10,9;
    NextFile = "Month"!!put(I,2.)!!".dat";
    NextFile = compress(NextFile,' ');
    infile xxx filevar = NextFile;
    input Flight $ Origin $ Dest $ Date : date9.
    RevCargo : comma15.2;
    output;
    end;
    stop;
    run;
    這個例程把Month11.dat, Month10.dat, Month9.dat三個原始文件裝入到movingq數(shù)據(jù)集中,從中我們可以學到幾點:
    1. 需要使用STOP語句跳出數(shù)據(jù)步循環(huán)。
    2. COMPRESS函數(shù)刪除了字符串中的空格,使"Month 9.dat"變成"Month9.dat"。
    3. 以上程序只在每個原始文件中讀出頭一條記錄。
    使用END=選項,我們可以控制數(shù)據(jù)步讀完整個原始文件。
    語法:
    INFILE file-specification END = variable;
    END=選項把是否到達輸入文件結尾標志放進variable變量中,如果當前的輸入沒有到達文件尾,變量值為0;反之變量值為1
    該變量不會被寫入到輸出SAS數(shù)據(jù)集中。
    由此,完整的程序為:
    data movingq;
    do I = 11,10,9;
    NextFile = "Month"!!put(I,2.)!!".dat";
    NextFile = compress(NextFile,' ');
    do until (LastObs);
    infile xxx filevar = NextFile end = LastObs;
    input Flight $ Origin $ Dest $ Date : date9.
    RevCargo : comma15.2;
    output;
    end;
    end;
    stop;
    run;
    項目中經(jīng)常用到如下技巧:
    data movingq;
    MonNum = month(today());
    MidMon = month(intnx(‘month’,today(),-1));
    LastMon = month(intnx(‘month’,today(),-2));
    do I = MonNum, MidMon, LastMon;
    NextFile = "Month"!!put(i,2.)!!".dat";
    NextFile = compress(NextFile,' ');
    do until (LastObs);
    infile xxx filevar = NextFile end = LastObs;
    input Flight $ Origin $ Dest $ Date : date9.
    RevCargo : comma15.2;
    output;
    end;
    end;
    stop;
    run;
    以上程序讀出當月和之前兩個月的原始數(shù)據(jù)。這里的重點是INTNX函數(shù),如果我們直接用當前月-1,-2來得到前兩個月,在1,2月時程序就會發(fā)生錯誤。INTNX作用是返回間隔某個時間端的時間。函數(shù)格式為:
    INTNX('interval',start-from,increment)
    'interval' 一個字符常量,或者是存放時間間隔單位的變量。表示間隔單位。
    start-from 表示日期,日期時間或者時間的SAS表達式,作為起始點。
    increment 一個正或者負整數(shù),表示時間間隔的數(shù)量。
    函數(shù)細節(jié)可以查詢SAS在線幫助。
    題外話,與考試無關。項目中用的更多的是讀出一個路徑下的同一類接口文件,簡便方法是使用如下FILENAME。
    FILENAME cf_list PIPE 'dir c:|rawdata|cf????.dat /b';
    DATA cf_data;
    INFILE cf_list;
    LENGTH filename $20;
    INPUT filename $;
    INFILE in FILEVAR = filename END = LastFile;
    DO WHILE (LastFile = 0);
    INPUT ....
    ....
    ;
    OUTPUT;
    END;
    RUN;
    這段程序把c:|rawdata下面的所有cf0101.dat,cf0102.dat,...,cf????.dat讀入cf_data數(shù)據(jù)集中。如果看不明白,說明以上的內容你還沒有全部理解 :-)

總結

以上是生活随笔為你收集整理的sas infile和filename的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。