天天看點

SAS中的format

 本章主要詳細總結一下SAS軟體程式設計過程中的各種format。其中包括自定義format與系統自帶的各種數字格式,時間格式等等,以及與format相關的過程與函數用法。系統自帶format将在後續慢慢整理。
  • 自定義format,proc format過程用法及其與之相關的put/input,putc/inputc,putn/inputn用法。
/*  自定義format  */
proc format;
    invalue visitn  'Day1'=1
                    'Day2'=2
                    'Day3'=3
                    'Day4'=4; 
    value  visit  1='Day1'
                  2='Day2'
                  3='Day3'
                  4='Day4';

    value   sex 1='男'
                2='女'
            country 3='中國'
                    4='美國';

    invalue sexn '男'=1
                 '女'=2
            conutryn  '中國'=3
                      '美國'=4;
run;
/*  測試資料集  */
data test;
    visitn=1;visitc='1';formatc='$sex.';formatn='sexn.';format='8.1';output;
    visitn=2;visitc='2';formatc='$sex.';formatn='sexn.';format='8.2';output;
    visitn=3;visitc='3';formatc='$country.';formatn='countryn.';format='8.3';output;
    visitn=4;visitc='4';formatc='$country.';formatn='countryn.';format='8.4';output;
run;
/*  對資料集中的變量使用自定義format  */
data start;
    set test;
    visit=put(visitn,$visit.);

    mixc=putc(visitn,formatc);

    mix=inputc(visit,formatn);

    numc=putn(visitn,format);

    num=inputn(visitc,format);
run;
    
           

上面這段程式可以很直覺全面的展現了proc format過程的用法,以及相關對應的put/input用法。

首先 ,value/invalue 語句分别和put/input比對使用,value/invalue語句用法為 value/invalue ($) foramt xx=yy;

其中value語句用于将變量值轉化為字元型,即等式右端的yy為字元型,與put函數搭配使用轉字元;

invalue語句用于将變量值轉化為數值型,即等式右端的yy為數值型,與input函數搭配使用轉數值。

value後的format為自命名的format名稱,用于後續引用,引用時變量名後必須加'.'結尾。

在此需注意的是,value後的format名前是否要加$符号取決于等式左邊的xx是否為字元型,若xx為字元型,則必須加$,否則不加。invalue後的format名前一般不加$。總結來說,即value定義的format名前是否加$取決于使用該format的原變量是否為字元型。
  • 這裡順便介紹下putc/inputc與putn/inputn的用法。

與put/input相同putc與putn是用于轉化為字元型,inputc與inputn用于轉化為數值型。

不同點在于put/input對一個變量所使用的format必須是一緻的,format必須是常值,不能為變量。

而putc/putn/inputc/inputn作用于一個變量的format可以是個變量,即相當于一個變量的不同觀測可以有不同的format。

最後putc與putn的差別在于putc作用于一個變量的format對應的變量所含的格式必須是自定義格式名,

而putn作用于一個變量的format對應的變量所含的格式必須是系統自帶的數值型格式名,例如8.3,如w.d這個形式以及best.等形式。

總之,putn一般用于将數值型變量,轉化為該數值變量對應的字元形式。

inputc/inputn原理與上述一緻。

format語句:format var format.,對變量var施加一個format,但是此時,變量var的值并不會改變,類型也不會變,而僅僅是顯示成了format定義的樣子。

format _all_;informat _all_;去除資料集中所有變量顯示的輸入輸出格式。

将format導出至資料集:使用proc format的cntlout=選項。

從符合标準的sas資料集導入format:使用cntlin=選項。符合标準即,包含固定字段的資料集,所必須的字段名為fmtname,start,end,label。

我們經常在根據分類變量做統計過程出表的時候,需要将全部的分類列出,且按照規定的順序排序。但是由于分類變量中出現的值并不夠全面和完整,此時,我們可以通過proc format過程定義format,然後導出至資料集,隻keep我們所需要的列,然後和分類不夠全的資料集merge,并根據我們定義的順序排列,得到分類完整且正确排序的表。

SAS