close

20170929 星期五

(0) 基本概念

SAS程式是由DATA Step和PROC Step兩部份所組成。

SAS資料集之建立 例1 

00001 DATA A;
00002 INPUT NAME $ 1-7 MATH 9-11;
00003 CARDS;
00004 GERGO 83
00005 ALERN 95
00006 CARMEL 63
00007 PROC PRINT;
00008 RUN;

例1中,第一行到 第三行稱為資料段,以DATA開頭,以CARDS 結束。
第一行告訴SAS:我們要建立一個資料集A,這個資料集可以是任何你想要取的名稱。
第二行是一個 INPUT敘述,告訴SAS第一個變數是NAME ,位於資料卡的第一欄到 第七欄,其中的$表示NAME是文字變數,第二個變數MATH位於資 料卡的9-11欄,是數字變數。
第三行之CARDS敘述表示資料步驟的敘述句到此結束,下面是資料的開始;
因此第4-6行即為資料,
第7 行是一個SAS程序步驟(PROC step),指示SAS去列印上述資料.印出最近一次使用到的data set,如要指定用 DATA=資料集名稱 指定要印出哪個資料集

範例2:

data test;
infile cards dlm=',@';
input accno acname $ balancce;
cards;
200000,Sara,20000
456000@Lisa@39000
;
proc print data=test;          /* 螢幕輸出
       data EGHOME.test1;   /* 儲存在永久檔
       set test;
run;

範例3:

libname lib名稱 '資料夾路徑';

data lib名稱.新sas7bdat檔名;
     set lib名稱.原sas7bdat檔名
     新變項一 = 原變項一 + 原變項二;
     新變項二 = 原變項一 - 數字;
     新變項三 = 原變項一 * 原變項二;
     新變項四 = 原變項一 / 數字;
proc print data=lib名稱.新sas7bdat檔名;
     var id 新變項一 新變項二 新變項三 新變項四;
run;

(1) SAS 永久檔(SAS Data Library):

SAS 永久資料檔為「兩階段命名」,所謂兩階段是指所有SAS永久資料檔都是由「Library 名稱」和「SAS 檔案名稱」組成,正式永久資料檔 的寫法應為「Library 名稱 . SAS 檔案名稱」,而所謂「Library 名稱」是資料夾的暱稱(nickname)或標籤(label),當沒設定 「Library」時,SAS 會自動將資料儲存於「WORK」的 Library,反之,若有設定 Library,SAS 會以永久檔的形式存在設定的「LIBNAME」所宣告的 Library(即資 料夾)中。
「LIBNAME」為宣告我們 要設定一個新的 Library,接下來的「mylib」為 Library 的名稱,然後再宣告這個 Library 在本機電腦的路徑,記得要使用引號將路徑包裹起來。

LIBNAME mylib "E:\SASNote\epaper\"; 
DATA mylib.esrd_data_082222;
SET esrd_02;
RUN;

註: 在「DATA set」中有兩個指令可以完成部份工作, 分別為「WHERE」和「IF」指令。

執行步驟:
 (1.1).首先在 SAS 目錄下建立您自己的 Library 子目錄。 C:\SAS>WuLib 
 (1.2).進入 SAS 系統。
 (1.3).以 LIBNAME 指令建立 Library reference。
       LIBNAME WULIB 'C:\SAS\WuLib';
       DATA WULIB.BODY;
       INFILE 'C:\DATA\BODY.DAT';
          INPUT W1 W2;
       CARDS;  

(1.4).執行以上程式後,可在 C:\SAS\WuLib 目錄下看到 BODY. sas7bdat 的 SAS data set。

範例:暫存檔

LIBNAME st 'C:\SAS\WuLib';
DATA aaa;
SET st.TYPE;
RUN;

永久檔

LIBNAME st 'C:\SAS\WuLib';
DATA st.aaa;
SET aa;
RUN; 

(2)SET 敘述句

1.將資料集A的部份資料,複製到新的資料集B 

data newname;
set oldname;

  1.1.複製現存資料集中,部份變數
    data newname;
     set oldname;
     keep (drop) 變數名;

   1.2.複製現存資料集中,部份觀察值

      data newname;
      set oldname;
      if … then delete;
 

2.以資料集A的資料產生新變數到新的資料集B

data newname;
set oldname;
new_var_name=經過運算元處理的舊變數;

3.將數個資料集縱向連結至一個新的資料集

data newname;
set oldname1 oldname2 oldname3 oldname4; 

(3)資料輸入格式

(2.1)資料的輸入是以 INPUT 關鍵字開始,讀入哪些變數,各個變數的觀 測值在資料檔的位置等等

       (2.1.1) 欄位輸入法(Column input)
           此法輸入最省空間,有 missing values 也最容易看出,但所有資料必 需案所指定的格式排列整齊。

        (2.2.1)行輸入(column input) 例1 即為行輸入,其方式是在變數名稱後指定其 所在欄位,如果是文字變數,則在變數名稱與欄位間加"$"來區別。
        (2.2.2)列舉輸入(list input) 例2 為列舉輸入,此種方式僅要列出所有變數名稱,而文字變 數則只在變數名稱後加"$" 區別即可,但此種輸入方式必須注意 的是在資料卡上,每個變數值之間一定要以一 個或以上的空欄隔開,而且每個觀察值一定要依變數名稱排列之次序排列之。
                 DATA CLASS1;
                 INPUT NAME $ MATH;

        (2.2.3)格式輸入(formatted input) 例3 為格式輸入,此種方式要以特定格式來指示 各變數值所在 的位置,可用的格式如下:
                  w. 表數字變數的長度為w
                  w.d 表數字變數的長度為w而其中小數佔d位
                  $w. 表文字變數的長度為w
                  @n 移動到第n個欄位 +n 移動n位

                  DATA CLASS2;
                  INPUT NAME $7. MATH 4.;
                 第二行表示第一個變數之名稱為NAME,為文字變數佔7 個欄位,第二個變數名稱為MATH,是數字變數佔4個欄位。 

(2.2)INFILE 若欲輸入之資料不是列在資料步驟之下,而是存放在 SAS 系統以外的軟 碟或硬碟中,需用此句來指定。 

(4)資料集輸出並列印在OUTPUT

PRINT的選擇項:【DATA=】宣告要印出的資料集

               ROUND】宣告取整數值

               NOOBS】宣告觀察體號碼不印出

               UNIFORM】宣告所有頁面均以同一格式印出

 

PRINT的關鍵字:【VAR】宣告要印出的變項

               BY】宣告以特定變數分開列印

 

DATA CASE;

 INFILE 'C:\D001.txt' missover;

 INPUT ID $ 1-4 Gend 5 age 6-7 Mar 8 Height 9-14 .1;

 MISSING 999;

 

PROC PRINT DATA=CASE ROUND NOOBS UNIFORM;

TITLE '標題' ;

VAR ID age;

BY ID;

RUN;

    

       

arrow
arrow
    文章標籤
    SAS E_ SAS LIBNAME
    全站熱搜

    stanley 發表在 痞客邦 留言(0) 人氣()