SAS基礎課程-1999

1.SAS System簡介

1.1        導論

什麼是SAS系統

l          SAS系統是整合式的資料管理系統,用來分析資料並產生報表

l          經由SAS的管理視窗,可下指令,撰寫程式或視窗點選方式來操作

l          SAS系統會建立她專屬的資料格式檔案,稱作SAS DATA SET. 資料必須為SAS DATA SET(資料集)才可被SAS PROCedures分析運作

SAS的運作

SAS程式中包含一系列的DATA steps(步驟)PROC steps

l        DATA step是用來建立SAS data sets, 她包含一完整的程式語言,用來處理各種形態的資料

l        PROC step是來分析資料並產生統計報表

資料的輸入

你可以下列方式建立SAS data sets

l        將資料直接建入在程式中的資料行上

l        資料建立在外部的ASCII

l        經由視窗直接鍵入資料

l        從己存的SAS data set 讀取

l        從其他的資料管理軟體讀取

1.2        DATA Step

讀取SAS程式中的資料

DATA步驟提供完整的程式語法以建立和維護SAS資料集

SAS程式中可直接讀取條例式的資料

l        DATA  STUDENT;

l          INPUT  NAME $  SEX $  HEIGHT ;

l        CARDS;

l        王小明 M 132.5

l        李大同 M 143.0

l        林胡音 F 150.0

l        ;

l        RUN;

由外部檔案讀取資料

SAS程式中可直接讀取名部檔案中的條例式資料

外部檔名為STUDENT.DAT 內容如下

l        王小明 M 132.5

l        李大同 M 143.0

l        林胡音 F 150.0

程式內容如下:

l        DATA  STUDENT;

l          INFILE  ‘STUDENT.DAT’;

l          INPUT  NAME $  SEX $  HEIGHT ;

l        RUN;

取出部分資料

可以用程式語言去處理己存在的SAS資料集

l        DATA MALES;

l          SET PEPOLE;

l          IF SEX=’F’ THEN DELETE;

l        RUN;

建立多個SAS DATA SET

可以在單一的DATA步驟中,建立多個SAS資料集

l        DATA MALES  FEMALES;

l          SET  PEPOLE;

l          IF SEX=’F’  THEN  OUTPUT  FEMALES;

l          ELSE  OUTPUT  MALES;

l        RUN;

上下合併SAS DATA SETS

可以將結構性質相同的資料集合併

l        DATA  COMBINE;

l          SET  MALES  FEMALES;

l        RUN;

左右合併SAS DATA SETS

可以合併不同性質的資料

l        DATA  CLASS;

l          MERGE  STUDENT  GRADS;

l          BY  NAME;

l        RUN;

更新資料

可以更正檔來更新主檔

l        DATA NEW;

l          UPDATE  MASTER  TRANS;

l          BY  NAME;

l        RUN;

1.3        PROC Step

SAS系統的一些基本程式(PROCedures)

PROC步驟會從SAS的程式館藏中呼叫一程式使用,以下列出一些程式

 

STATISTICAL

l        CORR

l        FREQ

l        MEANS

l        SUMMARY

l        TABULATE

l        UNIVARIATE

 

REPORT WRITING

l        CHART

l        FORMS

l        PLOT

l        PRINT

 

UTILITIES

l        APPEND

l        COMPARE

l        CONTENTS

l        FORMAT

l        PRINTTO

l        SORT

l        TRANSPOSE

 

SCORING

l        RANK

l        STANDARD

程式簡介

PROC PRINT;列印各變數資料和總計

l        PROC  PRINT  DATA=PAYDATA  NOOBS;

l          BY  DEPT;

l          WHERE  DEPT=916 OR  DEPT=918;

l          SUM  NETPAY;

l          FORMAT  NETPAY  DOLLAR9.2;

l          TITLE  員工薪資月報表’;

l        RUN;

PROC  MEANS;作簡單的描述性統計

l        PROC  MEANS SUM MEAN DATA=PAYDATA;

l          VAR  NETPAY;

l          CLASS  DEPT;

l          TITLE  各部門月薪資總計’;

l        RUN;

PROC  TABULATE;作含總結的表格報表

l        PROC  TABULATE  DATA=PAYDATA;

l          CLASS  SEX  DEPT;

l          VAR  NETPAY;

l          TABLE  SEX*DEPT, NETPAY*N=’COUNT’  ETPAY*SUMF*F=DOLLAR9.2;

l          WHERE  DEPT=916  OR  DEPT=918;

l          TITLE  以表格方式查看薪資報表’;

PROC  CHART;作出資料的柱狀圖

l        PROC  CHART  DATA=PAYDATA;

l          VBAR  DEPT/ SYMBOL=’&’  SUMVAR=NETPAY  TYPE=MEAN;

l          FORMAT NETPAY  DOLLAR6.;

l          TITLE  薪資月報表’;

l        RUN;

PROC  PLOT;作二維資料繪圖

l        PROC  PLOT  DATA=STUDENT;

l          PLOT  WEIGHT*HEIGHT;

l          TITLE ‘學童身高對體重圖’;

l        RUN;

1.4        SAS的管理視窗

SAS的三個主要管理視窗

l          PGM視窗:用來撰寫,修改和執行SAS程式

l          LOG視窗:查看SAS程式執行順序,錯誤訊息和SAS系統的訊息

l          OUTPUT視窗:SAS系統的分析結果報表

其他常用視窗

l        FILENAME  目前定義的檔案參考名稱

l        LIBNAME   目前定義的目錄參考名稱

l        KEYS       目前定義的功能鍵名稱

l        OPTIONS    目前定義的SAS系統選項值

l        DLGLIB     管理查看目前的資料館及資料集

2.SAS 基本概念

2.1        導論

問題實例

市立動物園,近日收到一群動物,

l          計算體重及每日食物供應量的描述性統計

l          用柱狀圖描繪出各類動物的個數

l          列出原始資料

原始資料描述

l          動物名稱 1-10

l          類別  13-14

l          性別  16

l          體重  18-23

l          日食量  25-29

原始資料

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

SAS 程式

所有的SAS程式都是由一系列的SAS STEP組成

l        DATA  STEPS用來建立SAS  DATA  SETS

l        PROCedure STES用來分析或處理SAS DATA SETS

以下的SAS程式可完成上面問題

l        DATA  STUDENT;

l          INPUT  NAME  $  SEX $  HEIGHT  WEIGHT;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

l        PROC  MEANS;

l          VAR  HEIGHT  WEIGHT ;

l        PROC CHART;

l          VBAR  SEX;

l        PROC PRINT;

l        RUN;

RUN程式並指出何者為

l        原始資料

l        SAS  DATA  STEP

l        SAS  DATA  SET

l        SAS PROC STEP

l        LOG  AND  REPORTS

2.2        SAS DATA SETSSAS程式

SAS程式的步驟(STEPS)

SAS程式包含DATA  STEPSPROC  STEPS. 每一個STEP是由一個或更多的敘述(STATEMENTS)所組成

SAS  STATEMENTS

l        通常由特定的關鍵字開頭

l        用一個分號[;]作為敘述的結束

l        可在一行的任何位置開始或結束, 或可跨越多行

DATA STEP,須要合理的程式語法來處理資料

PROC STEP中只告訴SAS 系統要作什麼,不用指出如何作

建議在程式撰寫中,DATA , PROC RUN寫在每行的第一格,其他敘述內縮

SAS DATA SETS和變數(Variables)的命名

外部檔名為PLAY1.DAT 內容如下

l        2  3  5  7

l        8  6  9  10

程式內容如下:

l        DATA  PLAY1;

l          INFILE  ‘PLAY1.DAT’;

l          INPUT  V1 V2 V3 V4 ;

l        RUN;

有很多的敘述中包含有[資料集][變數]的名稱在內

所有的SAS命名規則都要

l        包含1-8個字元

l        必須以A-Z或底線[_]開頭

l        第二個字每開始可用任何字母或數字或底線

建議:用有意義的文字命名較能瞭解資料含義

注意:所有的SAS名稱是不管字母大小寫的

建立SAS資料集

使用DATA  STEP讀取原始資料成為SAS資料集

l        資料必須轉換為SAS資料集才能被SAS PROCedures分析

l        每一個SAS資料集都有一個名稱,並存在磁片,磁帶或硬碟中

l        SAS執行間可有多個SAS資料集被建立

SAS 資料集的結構

每一個SAS資料集皆含有描述和實際資料二部份

l        描述:變數名稱及其屬性,可用PROC  CONTENTS;看出

l        實際資料:以二維概念存放, 行的方向稱Variable 列方向稱Observations,如同原始資料的一筆

處理和分析SAS資料集

使用PROC  STEPS去讀取或分析SAS資料集並產生報表

2.3        SAS程式的管理

SAS的視窗介紹

視窗名稱,COMMAND BAR,功能鍵

重排視窗並存檔

介紹[OPTIONS]HAPI [EDIT TOOLS]

PGM視窗

l        建立程式

l        SUBMIT 程式

l        RECALL 程式

l        CLEAR 視窗

l        FILE  AND  OPEN 程式

3.讀取原始資料

3.1        建立SAS資料集

原始資料輸入

你可能己經有不同的資料格式,SAS提供多種可用的方式,將你的資料格式轉入SAS資料集中

DATA步驟中,SAS能讀取程式內資料和外部資料

l          使用DATA敘述準備建立SAS資料集

l          使用CARDS告知SAS,資料就在下面程式中或使用INFILE告知SAS資料在那個外部檔案中

l          使用INPUT去定義變數名稱和屬性,並定義讀取資料的方法

DATA敘述

DATA敘述有二個主要功能

l        代表DATA步驟的開始

l        命名即將建立的資料集

DATA敘述的一般格式如下: DATA SASdataset(s);

l        DATA  STUDENT;

l          INPUT  NAME  $  SEX $  HEIGHT  WEIGHT;

l          CARDS;

l        data lines

l        RUN;

3.2        讀取原始資料

行輸入

假如你的資料是整齊的排列在每一行中, 並且內容是標準的六字或數字,那你就可以用行榆入來讀取資料

當使用行輸入讀取資料時,

l        正確告知那個變數的資料在那幾行間

l        使用[$]指出這個變數是文字變數

INPUT敘述的一般格式: INPUT variable [$] startcol-endcol;

l        DATA  STUDENT;

l          INPUT  NAME  $  SEX $  HEIGHT  WEIGHT;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

DATA STEP中的程式流程

SAS系統在處理DATA步驟時,分二個階段

第一步:編譯

第二步:執行

編譯DATA STEP程式

DATA步驟被編譯時

l        查看每一個敘述時否有文法錯誤

l        準備一塊暫存區存放原始資料

l        暫存區的資料分割成SAS的每一筆資料

l        描述寫入SAS資料集變數

執行DATA STEP程式

DATA步驟被執行時

l        每一個可被執行的SAS敘述在一筆資料讀入時都被執行一次,直到所的資炓讀入完畢

l        在讀入新資料前,每一個變數值都會被清除成缺失值

行輸入的特性

DATA  STUDENT;

  INPUT  NAME $ 1-8 SEX $ 10  HEIGHT 12-18  WEIGHT 19-22;

  CARDS;

l        資料可以任何序讀入

  INPUT  SEX $ 10 $ 1-8  HEIGHT 12-18  WEIGHT 19-22;

l        空白的欄位讀成缺失值

l        在文字變項中充許空白

l        同一欄位元或部分可重覆讀取

  INPUT  ID 1-8  HID  1-3;

行輸入時的資料值

用行輸入讀入文字變項時

l        變數內容左靠

l        變數的長度由INPUT敘述的行寬決定

l        文字變數的最大長度是200

用行輸入讀入數字變項時

l        原始資料的數值可填在欄位中的任何位置

l        可在數字中加入正負號,小數點或科學符號

格式輸入

格式輸入是另一種讀取原始資料的方法,幾乎可以讀取任何形態的原始資料(標準或非標準)

使用格式輸入時,

l        使用指標控制器,移動指標到要讀取資料的位置

l        取一個變數名稱

l        用一個informat(格式)去描述原始資料

格式輸入的一般格式為: INPUT  指標控制器 變數名稱 格式 ;

指標控制器

l        @n  移動指標至第n

l        +n  往後移動n

讀取標準文數字用的格式

l        w.  讀取w位欄寬的標準數字

l        w.d  讀取w位欄寬的標準數字並加上d位數的小數

l        $w.  讀取w位元欄寬的標準文字, 略去帶頭的空白格

l        $VHARw.  讀取w位元欄寬的標準文字, 保留帶頭的空白格

注意:所有的格式必須在最後加上PERIOD[.]

l        INPUT  NAME $8. @10 SEX $1.  +1  HEIGHT  7. +1 WEIGHT  4.;

讀取特殊資料值

格式輸入:最常用來讀取特殊的外部資料

l        BZw.d  將欄位中的空白值讀成[0]

l        COMMAw.d  讀取數字中含[$][,][%]等非標準字元

讀取月薪資料

l          DATA  MONTH;

l            INPUT  MONTH $  MONEY COMM8.;

l          CARDS;

l          JAN $26,135

l          FEB $27,332

l          MAR $29,000

l          ;

l          PROC  PRINT  DATA=MONTH;

l          RUN;

混合輸入

INPUT中同時使用行輸入和格式輸入讀取資料

l        DATA  STUDENT;

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

3.3        讀取外部原始資料

導言

SAS可以從程式中或外部檔案中直接讀取原始資料, 而後建立的SAS資料集內容是完全一樣的, 從程式中讀取資料是使用CRARDS敘述,從外部檔案中是使用INFILE敘述

l        DATA  MONTH;

l          INFILE  ‘MONTH.DAT’;

l          INPUT  MONTH $  MONEY;

l        RUN;

 

l        DATA  MONTH;

l          INPUT  MONTH $  MONEY;

l        CARDS;

l          Data lines

l        RUN;

INFILE敘述

INFILE敘述來指出外部資料檔的位置,以備讀取

INFILE敘述的一般格式: INFILE  檔案路徑名稱選項 ;

讀取外部資料檔的步驟如下:

1.        使用DATA敘述,作為開始DATA步驟的開始

l        DATA SASdataset;

2.        INFILE敘述指出外部資料檔的名稱路徑

l        INFILE  檔案路徑名稱’;

3.        使用INPUT敘述告訴SAS如何讀取每一行資料

l        INPUT  variables;

實際演練CARDSINFILE並看三個視窗結果

4.SAS資料集的處理

4.1        PROC步驟導論

起動SAS PROC(程式)

PROC敘述呼叫一個SAS程式

SAS程式是預先寫好的SAS程式,可作下列事項

l          讀取SAS資料集

l          建立SAS資料集

l          計算統計量

l          印出結果報告

l          處理資料

l          管理SAS資料集

PROC的一般格式: PROC program options;

l          PROC  PRINT;

l          PROC  PRINT  DOUBLE  NOBS  DATA=MONTH;

DATA= 選項指出要處理那個SAS資料, 如果省略此選項, SAS將處理最近產生的SAS資料集

程式中的敘述

加入其他敘述,以修改程式的執行方式

以下敘述

l        何使用在SAS的大部份的程式中

l        可放在PROC敘述後的任何位置

常伴隨的敘述有

l        VAR  variable(s); 指出資料集中的那些變項要被程式處理

l        WHERE  expression; 用條件式指出資料集中的那些觀測值要分析

l        BY  bariable(s);  要依變項來分群分析

作分群分析時,資料集必須先依分群大小順序排列資料

4.2        列出SAS資料集中的資料內容

PRINT程式

PRINT程式可印出SAS資料集的資料內容,並具以下特性

l        自動分頁

l        頁面最佳化處理

l        自動加上頁碼

l        變數名稱加上標籤

l        可以變數加總

使用PRINT程式

PROC  PRINT的一般格式為:  PROC  PRINT  options;

可使用的選項有

l        DATA=SASdataset  指出要處理的SAS資料集

l        DOUBLE  讓報表的列距加倍

l        NOOBS  不要印出觀測值的流水編號

可和PROC  PRINT一起使用的敘述有

l        BY  variable(s);

l        SUM  variable(s);

l        VAR  variable(s);

l        WHERE  expression;

VAR敘述

使用VAR敘述指出要列印的變數和列印時變數的排列順序

VAR敘述的一般格式為:  VAR  variable(s);

l        PROC  PRINT  NOOBS  DATA=SUTDENT;

l        VAR  NAME  WEIGHT;

l        RUN;

WHERE敘述

使用WHERE敘述擷取SAS資料集中的部份觀測值

WHERE的一般格式為:  WHERE  expression;

Expression判斷式可為計算式或邏輯運,可用[>,=,<,>=,<=,^=][or,and,not]

l        PROC  PRINT  DATA=STUDENT ;

l          WHERE  SEX=’F’;

l        RUN;

使用VARWHERE敘述

WHERE敘述是用來控制印出資料集的(觀測值)列數

VAR敘述是用來控制印出資料集的(變數名稱)行數

例如要印出資料集STUDENT,男生身高大於120公分者,且只印出姓名和體重

l        PROC  PRINT  DATA=STUDENT;

l          VAR  NAME  WEIGHT;

l          WHERE  SEX=’M’  AND  HEIGHT > 120;

l        RUN;

4.3        SAS資料集排序

SORT程式

SORT程式可重排SAS資料集中的觀測值,並將重排後的結果存入一個新的SAS資料集中

l        可同時依幾個變數排序

l        排序時可由小至大, 或由大至小

l        不會產生報表

l        將缺失值當成極小值

使用SORT程式

PROC  SORT的一般格式為:  PROC  SORT  options;

可使用的選項有

l        DATA=SASdataset  指出要處理的SAS資料集

l        OUT=SASdataset  指出排序完欲輸出的資料集

SORT程式中必須使用BY敘述

如不加以宣告,BY敘述中的變數是由小至大排序觀測值,如要按大至小排序,必須在變數名稱之前下[DESCENDING]選項

l        BY  POSITION;

l        BY DESCENDING  POSITION;

l        BY  POSITION  DESCENDING  MONEY;

依姓名排序學生資料並印出結果

l        PROC  SORT  DATA=STUDENT;

l          BY  NAME;

l        PROC  PRINT  DATA=STUDENT;

l        RUN;

依性別及身高大小排序學生資料並印出結果

l        PROC  SORT  DATA=STUDENT;

l          BY  SEX DESCENDING  HEIGHT;

l        PROC  PRINT  DATA=STUDENT;

l        RUN;

使用BY-group敘述作分群處理

當大程式中使用BY敘述時

l        程式依據BY-group分別處理每一個group

l        資料集必須依照依每個group排序

依性別印出學生資料

l        PROC  PRINT  DATA=STUDENT;

l          BY  SEX;

l        RUN;

當在PRINT程式中一起使用SUM敘述時, SUM中的變數總和會計算出來, 如果伴隨使用BY敘述時, 每一分群的總和也會一併計算

l        PROC  PRINT  DATA=STUDENT;

l          BY  SEX;

l          VAR  HEIGHT;

l        RUN;

5.美化報表

5.1        加入表頭行表尾行

TITLEFOOTNOTE敘述

TITLE敘述可定義在每頁表頭印出Title,最多可定義10TITLE

l        TITLE的一般格式為:  TITLEn ‘Ttitle’;

FOOTNOTE敘述可定義在每頁表尾印出FOOTNOTE,最多可定義10FOOTNOTE

l        FOOTNOTEn的一般格式為:  FOOTNOTEn ‘Footnote’;

當使用TITLE(FOOTNOTE)定義TITLEn, 那麼比n大的TITLE,將被抑制不印出

使用TITLEFOOTNOTE敘述

l        PROC  PRINT  DATA=STUDENT;

l        TITLE  中山國民小學’;

l        TITLE    82年度學童身高 體重記錄’;

l        FOOTNOTE  製表日期:88/07/30’;

l        RUN;

TITLE FOOTNOTE敘述是屬於全域性的, 一旦定義了TITLE,那麼往後的報表皆會印出,直到重新定義TITLE或重新起動SAS

重新定義TITLE和取消FOOTNOTE

l        PROC  PRINT  DATA=STUDENT;

l        TITLE  中山國小  82年度學童身高 體重記錄’;

l        FOOTNOTE  ;

l        RUN;

表頭尾視窗

COMMAND BAR的位置下TITLEFOOTNOTE指令,即可開啟表頭或表尾視窗

可查看或修改視窗內容

5.2        加入變數名稱的標籤

LABEL敘述

可用LABEL敘述來改善各程式的輸出報表,讓變數名稱可加上描述標籤,使閱讀更容易

標籤的一般格式為:  LABEL= variable=’label’ … ;

l        最多可有0個中文字

l        DATA步驟中使用LABEL敘述,可將標籤儲存在SAS的資料集中

l        可在PROC程式中臨時使用LABEL敘述宣告變數的標籤

PRINT程式中使用LABEL

PRINT程式中,SAS是內定用變數名稱作為行標題, 你可以在PROC  PRINT敘述的選項中,加入LABEL,來取代變數名稱,作為列印時的行標題

l        PROC  PRINT  DATA=STUDENT  LABEL;

l          LABEL  NAME=’姓名 

l                  SEX=’性別

l                  HEIGHT=‘身高

l                  WEIGHT=‘體重’;

l        RUN:

使用SPLIT=選項

LABEL的長度較長時,可能使用SPLIT選項,LABEL折成數行,當使用SPLIT選項時, 可以不用再下LABEL選項

5.3        使用SASFORMATS(格式)

FORMAT敘述

使用SAS的格式你可以輕易的改變SAS報表中的資料呈現方式,使用FORMAT敘述,指出那個變項使用那種格式

FORMAT敘述的一般格式為:  FORMAT  variable list format …;

l        使用FORMAT並不會改變SAS資料集中的資料值

l        DATA步驟中使用FORMA敘述,可將FORMAT存在SAS資料集的描述區中

l        PROC程式中使用FORMAT敘述,可臨時取代資料值的表現方式

SAS常用FORMATS

l        BESTw.  充許SAS系統自行選擇最好的輸出方式

l        w.  w寬度的位置寫出數字變數值

l        w.d   w寬度的位置寫出數字變數值,並含d寬度的小數點

l        $w.   w寬度的位置寫出文字變數值

l        COMMAw.d   在數字中加入[,]

l        DOLLARw.d   在數字中加入[$][,]

l        Zw.d     w寬度的位置寫出數字變數值,不滿w寬度時,前補[0]

l        ROMANw.  印出羅馬數字[XIV]

l        WORDSw.  以文字方式印出數字[twenty-three]

PRINT程式中使用FORMAT敘述

l        PROC  PRINT  DATA=STUDENT;

l          FORMAT   NAME $8.  SEX $1.  HEIGHT  6.1  WEIGHT  WORD20.;

l        RUN;

使用FORMATS,LABELS,TITLESFOOTNOTES

l        PROC  PRINT  DATA=STUDENT  SPLIT=’*’ ;

l          FORMAT  HEIGHT  COMMA8.1  WEIGHT  6.1;

l          LABEL  NAME=’姓名  SEX=’性別  HEIGHT=’兒童*身高  WEIGHT=’兒童*體重’;

l          TITLE1  中山國小’;

l          TITLE2    86學年度體位測量’;

l          FOOTNOTE  製表日期 88/08/10’;

l        RUN;

5.4        使用系統選項

OPTIONS敘述

SAS的系統選項

l        可以改變所有由程式產生的報表的外觀

l        一旦定義選項值, 選項值的功能會一直作用直到重新定義

l        可用OPTIONS敘述定義選項值,或在OPTIONS視窗中改變選項值

l        OPTIONS敘述的一般格式為:  OPTIONS  option;

增強列印的系統選項

使用來改變報表外觀的選項有

l        CENTER/NOCENTER  是否報表內容要置中處理

l        DATE/NODATE    是否要印出目前的日期和時間

l        NUMBER/NONUMBER  是否要在每項印出頁碼

l        LINESIZE=width   定義每項的寬度

l        MISSING=’char’  定義缺失值要用那個字每表示

l        PAGESIZE=n   定義每頁的長度

l        PAGENO=nn  指定頁碼

使用系統選項

l        OPTIONS  NOCENTER  NODATE  NONUMBER  PAGENO=1;

l        PROC  PRINT  DATA=STUDENT  SPLIT=’*’ ;

l          FORMAT  HEIGHT  COMMA8.1  WEIGHT  6.1;

l          LABEL  NAME=’姓名  SEX=’性別  HEIGHT=’兒童*身高  WEIGHT=’兒童*體重’;

l          TITLE1  中山國小’;

l          TITLE2    86學年度體位測量’;

l          FOOTNOTE  製表日期 88/08/10’;

l        RUN;

系統選項視窗

簡介OPTIONS視窗

5.5        列印結果

使用PRINTTO程式

視窗環境下己提供完整的列印功能

使用PRINTTO程式可以將輸出至OUTPUT視窗的結果, 重新導引至一個外部檔案

PRINTTO程式的一般格式為:  PROC  PRINTTO  options;

可選用的選項有

l        FILE=’檔名路徑    指出結果資料存放的位置

l        NEW  指出如果外部檔案己存在時,將其覆蓋, 如不使用NEW選項時,表示結果將累加至檔案中

l        不加任何選項的PRINTTO程式, 將報表輸出至OUTPUT視窗中

6.DATA步驟中更改資料

6.1        建立新變數和編輯觀測值

指定敘述

指定敘述通常是用來建立一個新的變數或更改某一存在的變數值

指定敘述的一般格式為:  變數名稱=運算式

SAS會將算式的計算結果值,指定給這一個變數

例如:讀取民國年度收支資料,並計算年度結餘,且將年度改為西元年

l          DATA  AA;

l            INPUT  YEAR  INPUT  OUTPUT  ;

l            DIF=INPUT-OUTPUT;

l            YEAR=YEAR=1911;

l          CARDS;

l          82 490500 378500

l          83 503000 389500

l          84 534400 450000

l          85 575000 410000

l          86 601500 475000

l          ;

l          PROC  PRINT  DATA=AA;

l            FORMAT  INPUT OUTPUT  DIF  COMMA10.;

l          RUN;

各種運算式

運算式種類

常式

l          N=0;  數字常式

l          DEPART=’IBMS’  文字常式

簡單運算

l          SUM=X+Y;  加法

l          DIFF=X-Y;   減法

l          TWICE=X*2;  乘法

l          HALF=X/2;  除法

l          CUBE=X**3;   次方

l          Neg=-X;   改變正負號

混合運算

l          A=X-Y+Z  由左至右

l          A=X+Y*Z  先乘除後減

l          A=X/Y/Z  由左至右

l          A=X/(Y/Z)  先計算()

函數

l          S=SQRT(X);

l          A=ABS(X);

l          Z=ABS(SQRT(X)-2);

SAS函數

使用函數可以簡化一些指定敘述

SAS的函數可分為下列幾類

l          算數函數

l          截斷函數

l          數學函數

l          三角及雙曲線函數

l          機率函數

l          計量函數

l          樣本統計函數

l          亂數函數

l          文字函數

l          日期及時間函數

l          特殊函數

函數的一般格式為:  FUNCTIONNAME(引數1,引數2, …)

UPCASE文字函數,將字母改為大寫

l          DATA  NAME;

l            INPUT  NAME $  1-17;

l            UNAME=UPCASE(NAME);

l          CARDS;

l          Binkley, Mike

l          James, Edward

l          Chung, Wanda

l          ;

l          PROC  PRINT  DATA=NAME;

l          RUN;

統計函數必須有多個引數, SAS在計算這些引數的統計值時, 只計算不是缺失值者

常用的統計函數有

l          CV  變異係數

l          MAX  最大值

l          MIN  最小值

l          MEAN  平均值

l          N  非缺失值的個數

l          RANGE  值域

l          STD  標準差

l          SUM  總和

l          VAR  變方

計算每天的最高,最低和平均溫度

l          DATA  TEMPS;

l            INPUT  DATE  $  T1-T4;

l            MAXTEMP=MAX(T1,T2,T3,T4);

l            MINTEMP=MIN(T1,T2,T3,T4);

l            MEANTEMP=MEAN(T1,T2,T3,T4);

l          CARDS;

l          01JUN99 25.5 35.6 32.1 26.3

l          02JUN99 24.5 31.3 30.9 25.5

l          03JUN99 24.7 32.2 40.4 34.3

l          04JUN99 32.7 32.2   .  37.3

l          05JUN99 31.4 32.0 42.0 36.0

l          ;

l          RUN;

函數和程式的不同

函數和程式都可以用來計算一些統計量

函數是用來計算每個觀測值的統計量(橫向計算)

程式是用來計算一個變數的統計量(縱向計算)

6.2        有條件地執行SAS程式

IF-THEN / ELSE敘述

使用IF-THE敘述可以依據某些條件執行部份SAS敘述

IF-THEN的一般格式為:

l          IF  條件式  THEN  敘述;

l          ELSE  敘述;

比較運算

l          EQ =    等於

l          NE  ^= ~=  不等於

l          LT    <  小於

l          GT    >  大於

l          LE    <=  小於等於

l          GE    >=  大於等於

定義學童體重大於40為過重,其他為正常

l          DATA  STUDENT;

l            INFILE  ‘STUDENT.DAT’;

l            INPUT NAME $  SEX $  HEIGHT  WEIGHT;

l            IF  WEIGHT > 40  THEN  FAT=’過重’;

l            ELSE  FAT=’正常’;

l          RUN;

數字比較

問卷中, 1=很好, 2=尚可, 3=不好 ,用以下程式轉譯

l          DATA  RECODE;

l            INPUT  CODE;

l            IF  CODE=1  THEN  RESPONSE=’很好’;

l            IF  CODE=2  THEN  RESPONSE=’尚可’;

l            IF  CODE=3  THEN  RESPONSE=’不好’;

l          CARDS;

使用以下的程式較有效率

l          DATA  RECODE;

l          INPUT  CODE;

l          IF  CODE=1  THEN  RESPONSE=’很好’;

l            ELSE  IF  CODE=2  THEN  RESPONSE=’尚可’;

l            ELSE  IF  CODE=3  THEN  RESPONSE=’不好’;

l          CARDS;

CODE含缺失值時會發生什麼狀況

文字比較

建立一變數GENDER取代變數SEX的內容

l          DATA  STUDENT;

l            INFILE  ‘STUDENT.DAT’;

l            INPUT  NAME $  SEX $  HEIGHT  WEIGHT;

l            IF SEX=’M’  THEN  GENDER=’男童’;

u          ELSE  GENDER=’女學童’;

l          RUN;

SEX含缺失值時會發生什麼狀況

LENGTH敘述

在程式中,變數第一次被使用時,決定了變數的長度, 但你可以使用LENGTH敘述先行定義變數的長度

LENGTH敘述的一般格式為:  LENGTH  variables $  length ..;

l          DATA  STUDENT;

l            INFILE  ‘STUDENT.DAT’;

l            LENGTH  GENDER $ 6;

l            INPUT  NAME $  SEX $  HEIGHT  WEIGHT;

l            IF SEX=’M’  THEN  GENDER=’男童’;

u          ELSE  GENDER=’女學童’;

l          RUN;

指出其他文字變數的長度

邏輯運算元

使用邏輯運算元連接一連串的判別

l          OR !,|  或者

l          AND &  並且

l          NOT ^,~  不是

DOEND敘述

DO敘述和它的配對敘述,可以將一群敘述包裝成一個單元,在某一條件下一起執行

DOEND敘述的一般格式為

l          IF  條件式  THEN  DO;

l             欲執行的敘述;

l          END;

使用DOEND敘述

l          DATA  STUDENT;

l            INFILE  ‘STUDENT.DAT’;

l            LENGTH  GENDER $ 6;

l            INPUT  NAME $  SEX $  HEIGHT  WEIGHT;

l            IF WEIGHT>140 THEN 

u          DO;

u            WTJUST=’過重’;

u            WTLEVEL=2;

u          END;

l            ELSE WTLEVEL=1;

l          RUN;

復習SAS的程式邏輯

SAS系統執行程式時

l          將程式敘述編譯成機械碼準備執行

l          依序執行程式中的每一個敘述,直到程式結束

l          重復上一步驟,直到所有的觀測值處理完畢

6.3        讀取SAS資料集

刪除觀測值

DELETE敘述或加入IF判斷式的DELETE是用來控制那些觀測值要寫入SAS資料集中

DELETE敘述的一般格式為: DELETE; IF 判斷式 THEN  DELETE;

l          DELETE敘述執行時,會停止一筆觀測值的處理

l          程式會馬上回到DATA步驟中的最開始

l          程式中的資料將不會寫入SAS資料集中

刪除SEX是缺失值的觀測值

l          DATA  STUDENT;

l            INFILE  ‘STUDENT.DAT’;

l            INPUT  NAME $  SEX $  HEIGHT  WEIGHT;

l            IF SEX=’M’  THEN  DELETE;

l          RUN;

選取觀測值

相對於DELETE敘述,我們可以用IF判斷式來選取觀測值,IF判斷式就如同一個門檻,只讓符合條件的觀測值通過

IF判斷式敘述的一般格式為:  IF 判斷式 ;

相對DELETE敘述:  IF NOT 判斷式  THEN  DELETE;

l          DATA  STUDENT;

l            INFILE  ‘STUDENT.DAT’;

l            INPUT  NAME $  SEX $  HEIGHT  WEIGHT;

l            IF NOT  SEX=’M’  ;

l          PROC  PRINT;

l          RUN;

IFWHERE在選取資料子集的時機

DATA步驟中使用IF判斷式和在PROC步驟中使用WHERE敘述是不同的,雖然最後都可以得到相同的結果

l          DATA  STUDENT;

l            INFILE  ‘STUDENT.DAT’;

l            INPUT  NAME $  SEX $  HEIGHT  WEIGHT;

l          PROC  PRINT;

l            WHERE   NOT  SEX=’M’  ;

l          RUN;

使用WHERE敘述時,所有的資料仍然存在資料集中,但只讓符合條件的資料進入PROC程序中分析處理

一次建立多個SAS資料集

OUTPUT敘述是用來控觀測是否寫入SAS資料集

OUTPUT敘述的一般格式為: OUTPUT; OUTPUT  SASdatset(s);

注意:

l          DATA步驟中一旦出現OUTPUT敘述,那麼在步驟結束時,資料將不會自動輸出到SAS資料集中

l          OUTPUT敘述一執行時,系統馬上將程式中目前的資料值輸出至SAS資料集中

l          OUTPUT敘述執行完後, 程式會繼續往下執行

OUTPUT敘述可用來

l          將讀入的一筆資料行, 輸出多筆資料至SAS資料集

l          從一個資料檔,輸出至多個SAS資料集

l          不用讀入資料即可以建立SAS資料集

將學童資料依男女性別分別建立資料集

l        DATA  MALE  FEMALE;

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          IF  SEX=’M’  THEN  OUTPUT  MALE;

l          ELSE  OUTPUT  FEMALE;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

選取變數

資料集選項DROP=KEEP=是用來決定那些要或不要存入SAS資料集中

料集選項DROP=KEEP=的一般格式為:

SASdataset(DROP=variables);

SASdataset(KEEP=variables);

l          使用在DATA步驟時,用來控制那些變數要放入SAS資料集中

l          使用PROC步驟時,只會在這一個PROC發生作用

l          是屬於不可執行的敘述,只在DATA步驟編譯時提供訊息

寫入選取的變數

將性資料在男生MALE資料庫中剔除

l        DATA  MALE (DROP=SEX);

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          IF  SEX=’M’  ;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

l        PROC  PRINT;

l        RUN;

刪除變數和VAR敘述的使用時機

資料集選項DROP=KEEP=DATA步驟中使用, 和在PROC步驟中使用VAR是不同的, 雖然有時它們可以得到相同的結果

l        DATA  MALE ;

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          IF  SEX=’M’  ;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

l        PROC  PRINT;

l          VAR  NAME  HEIGHT  WEIGHT;

l        RUN;

所有的變數都儲存在SAS資料集中,但用VAR敘述限制那些變數要在報表中出現

在多個資料集中寫入選取的變數

在單一個DATA步驟中,從程式中讀入資料,並建立二個SAS資料集,一個為MALE只有男童資料的姓名和身高, 另一個為FEMALE只有女童資料的姓名和體重

l        DATA  MALE (DROP=SEX  WEIGHT)

l               FEMALE(KEEP=NAME  WEIGHT);

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          IF  SEX=’M’  THEN  OUTPUT  MALE;

l          ELSE  OUTPUT  FEMALE;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

l        PROC  PRINT  DATA=MALE;

l          TITLE ‘男童身高資料’;

l        RUN;

l        PROC  PRINT  DATA=FEMALE;

l          TITLE ‘女童體重資料’;

l        RUN;

7.檢驗錯誤和缺失值的處理

7.1        查出程式語法錯誤

SASLOG視窗訊息

SAS的敘述中含有文法錯誤,:拼錯關鍵字或使用了錯誤的選項,會有一些錯誤訊息出現在LOG視窗

在編譯程式時,SAS會指出是否有文法錯誤,如發現會在LOG視窗

l          印出[ERROR]字元

l          指出發生錯誤的位置

l          提示解決錯誤的訊息

程式含有文法錯誤

DATA步驟中使用一個不合法的變數名稱

l        DATA  STUDENT;

l          INPUT  CHILDNAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          ;

查看LOG視窗

變數名稱拼錯

PRINT程序中使用VAR敘述,含一拼錯字的變數名稱,而後執行一個CHART程序

l        DATA  STUDENT;

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l          ;

l          PROC  PRINT;

l            VAR  NAME  SEX  WIEGHT;

l          PROC  CHART;

l            VBAR  SEX;

l  RUN;

查看LOG視窗

7.2        查出資料錯誤

SASLOG視窗中的NOTES

DATA步驟執行時,錯誤資料發生情形

l          某變數中的資料不合法

l          函數中使用的引數不合法

l          非法的數學運算

當資料錯誤發生時

l          LOG視窗中描述錯誤的原因

l          假使DATA步驟中有用INPUT敘述時,將印出含有錯誤資料的那一筆原始資料,並印出尺規

l          列出程式中各變數的資料值

l          繼續程式的執行

系統變項

在每一個DATA步驟中,系統會自動建立二個系統變數,_N__ERROR_

l          _N_   指出DATA步驟中程式執行的次數

l          _ERROR_   指出DATA步驟執行過程中,是否有錯誤發生,1表有, 0表沒有

這兩個系統數數可在程式敘述中使用,但不會存入SAS資料集中

程式中含資料錯誤

用數字變數讀取文字資料,並有非法的數學運算

l        DATA  STUDENT;

l          INPUT  NAME  $ 1-8  @10 SEX  1.  @12  HEIGHT  WEIGHT;

l           BMI=WEIGHT/(HEIGHT**2)*10000 ;

l          CARDS;

l          王小明 M  34.5 !25.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0  0

l          林文華 F  36.5 35.5

l          ;

l          PROC  PRINT;

l          RUN;

查看SAS視窗和OUTPUT視窗

7.3        缺失值的處理

界定缺失值

資料收集時,時常會有很多的缺失值. SAS系統在讀取原始資料時,便能分分辨出缺失值

l          在原始資料中,缺失值以空白或[.]表示

l          SAS資料中以空白表文字變數的缺失值,[.]表示數變數的缺失值

在程序中SAS對有不同的方式處理缺失值,但最常用的方法是將它們排除不予處理

缺失值的處理

假如欄位是空白或[.],那麼變數的值將是缺失值

l        DATA  STUDENT;

l          INPUT  NAME  $ 1-6  @8 SEX  1.  @10 HEIGHT  4.1 @15 WEIGHT 5.1;

l          CARDS;

l          王小明 M 34.5 125.5

l                 F 35.0    .

l          李大同 M      128.5

l          ;

l          PROC  PRINT;

l          RUN;

每一筆資料進入前所有的變數值皆會變成缺失值, 如沒有進一步指定,則變數值仍為缺失值

l        DATA  STUDENT;

l          INPUT  NAME  $ 1-6  @8 SEX  1.  @10 HEIGHT  4.1 @15 WEIGHT 5.1;

l           IF  WEIGHT>=35  THEN DES=’過重’;

l          CARDS;

l          王小明 M 34.5 125.5

l                 F 35.0    .

l          李大同 M      128.5

l          ;

l          PROC  PRINT;

l          RUN;

在比較運算上缺失值是視為無限小

l        DATA  STUDENT;

l          INPUT  NAME  $ 1-6  @8 SEX  1.  @10 HEIGHT  4.1 @15 WEIGHT 5.1;

l           IF  WEIGHT < 35  THEN DES=’太輕’;

l           BMI=WEIGHT/(HEIGHT**2)*10000 ;

l          CARDS;

l          王小明 M 34.5 125.5

l                 F 35.0    .

l          李大同 M      128.5

l          ;

l          PROC  PRINT;

l          RUN;

7.4        修正一般的程式問題

敘述結尾的分號[;]

最常發生的程式錯誤是忘了在敘述的結尾放上一個分號

在下列程式中的INPUT敘述最後故意漏寫分號,查看SAS在編譯的時候會有什麼事情發生

l        DATA  MALE  FEMALE;

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

LOG視窗中列出的錯誤訊息好像對不上真正發生問題的那一行敘述

如在SAS指出錯誤的敘述行指不出錯誤時, 就往上找錯誤

文字串要用左右引號

文字串的右必須使用引號

下列程式中文字串故意遺漏引號,查看LOG視窗有什麼訊息

l        TITLE 中山國小學生87度體位測量記錄 ;

l        DATA  MALE  FEMALE;

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          IF  SEX=M  THEN  OUTPUT  MALE;

l          ELSE  IF  SEX=F  THEN  OUTPUT  FEMALE;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

為何資料MALEFEMALE中沒有任何一筆資料

引號要成對使用

沒有成對使用引號時,會使SAS系統無法得何處是敘述的結束

l        DATA  MALE  FEMALE;

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          IF  SEX=’M  THEN  OUTPUT  MALE;

l          ELSE  OUTPUT  FEMALE;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

程式中含有非成對的引號, LOG視窗中可看到一個警告訊息[字串超過200個字母]

修正非成對的引號錯誤,再重新執行程式時,還是會得到一個相同的錯誤訊息

當程式發生引號不成對使用時, SAS系統無法找到如RUN;DATA;PROC;等來作為目前步驟的結束, 所以執行[‘;RUN;][“;RUN;],就能把目前的步驟結束

而後RECALL程式, 再執行程式一次即可

注意文字的大小寫

文字變數在作比較大小時,大小寫必須完全一樣,才能得到理想結果

l        DATA  MALE  FEMALE;

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          IF  SEX=’m’  THEN  OUTPUT  MALE;

l          ELSE  IF  SEX=’f’  THEN  OUTPUT  FEMALE;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

查看LOG視窗會有什麼結果

RUN敘述

SAS系統中的每一個步驟在編譯和執行時是完全獨立的

一個步驟在未遇到DATA;PROC;RUN;敘述時,是不會完成編譯工作的

執行下列沒有用RUN;作結尾的程式

l        DATA  MALE  FEMALE;

l          INPUT  NAME  $ 1-8  @10 SEX $1. @12  HEIGHT  WEIGHT;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

l        PROC  PRINT;

DATA步驟己執行,PROC步驟仍處在編譯的階段, 因沒有一個敘述告訴系統去完成這一個敘述

執行一個RUN;敘述去完成這一個步驟

PRINT程序完成並產生報表

8.整理和儲存SAS資料值

8.1        SAS資料集永久存檔

WORK資料館

SAS資料館是SAS用來儲存檔案的地方,它是磁碟中的一個目錄,SAS系統啟時,自動定義一個目錄

l          儲存所有的SAS暫存資料集

l          在離開SAS系統時,自前清除目錄中所有檔案

l          這個資料館的名字叫WORK

SAS資料集的附檔名在PC[SD2],UNIX[ssd01]

SAS資料集的名稱

每一個SAS資料集的名稱都含有一個SAS資料館名稱: libref.SASdataset

libref    對映到一個磁碟目錄,SAS的資料集就儲存在這個目錄中,假如沒有指定參考資料館, SAS系統就自動指定WORK為它的參考資料館

l        DATA  STUDENT;

l          INPUT  CHILDNAME  $  SEX $  HEIGHT  WEIGHT;

l          CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          ;

查看LOG視窗中的注意事項, 並指出ork目錄的路徑

LIBNAME敘述

LIBNAME敘述是用來指出資料館名稱和磁碟目錄間的關係

LIBNAME的一般格式為:  LIBNAME  資料館參考名磁碟目錄’;

一旦定義了資料館參考名稱, SAS執行期間它將一直存在,直到重新定義. LIBNAME視窗中可以查目前所有定義的資料參考名稱

資料館名的命名方式是依循SAS變數名稱的命名方式

SAS的永久資料集

: STUDENT資料集永遠存在MYDATA資料館中

l          LIBNAME  SSD  ‘C:\DATA’;  /* PC */

l          LIBNAME  SSD  ‘~/data’;   /* UNIX */

l        DATA  SSD.STUDENT;

l          INPUT  NAME $  SEX $  HEIGHT  WEIGHT;

l        CARDS;

l          王小明 M  34.5 125.5

l          王淑德 F  35.0 135.0

l          李大同 M  37.6 128.5

l          孫小威 M  40.0 136.5

l          林文華 F  36.5 35.5

l        ;

查看LOG視窗中的NOTE:

為什麼要儲存SAS資料集

你可以將SAS資料集永久儲存在資料館(除了WORK)

如困要將SAS資料集存在軟磁片中, 只要將資料館名稱指向軟式磁碟機即可

l          SAS資料集儲存起來有下列好處

1.          往後不用再使用DATA步驟作資料的轉換,因為資料己儲存成SAS的資料格式

2.          SAS資料集有它自己的CODE  BOOK

3.          DATAPROC步驟中,可以直接使用SAS的永久資料集

SAS永久資料集的使用

SAS資料集一旦儲存可供往後分炘使用

使用SAS的永久資料集時

1.          首先用LIBNAME敘述指定一個資料館參考名,並指出資料集是放在那個磁碟機中的那個目錄

2.          使用SAS資料集時,記得在名稱之前加上資料參考名

l          LIBNAME  SSD  ‘C:\DATA’;  /* PC */

l          LIBNAME  SSD  ‘~/data’;   /* UNIX */

l        PROC  PRINT  DATA=SS.STUDENT;

l          RUN;

8.2        DATA步驟讀取SAS資料集

SET敘述

DATA步驟中,可以從己存在的資料集中建立新的SAS資料

使用SET敘述讀取SAS資料集

SET敘述的一般格式為:  SET  SASdataset;

l          DATA步驟中使用

l          讀取一個暫存或永久的SAS資料集

l          自動讀取所有的變數和所有的觀測值

注意: 不要用INFILEINPUT去處理SAS資料集

使用SET敘述

使用STUDENT永久資料集建立一個新的SAS資料集,名稱為STUD2,新增一個變數叫BMI=WEIGHT/HEIGHT**2*10000 ;

l          DATA  STUD2;

l            SET  SSD.STUDENT;

l            BMI=WEIGHT/HEIGHT**2*10000 ;

l          PROC  PRINT;

l          RUN;

是否可以從外部檔案建立STUD2SAS資料集

STUD2是暫存或永久資料集

編譯SAS步驟

讀取在SET敘述中指定的SAS資料集的描述資料

建立資料料暫存區, 包含己存在資料集中的所有變數和在DATA步驟中程式所建立的所有變數

將描述資料寫入即將建立的新SAS資料集中

執行SAS步驟

己存在的SAS資料集,每一筆觀測值讀入時,都會執行一次

SET敘述每執行一次,就有一筆觀測值讀入並放在暫存區中

資料進入後,DATA步驟中的程式就會執行一次

在執行了DATA步驟中的最後一行可執行敘述(OUTPUT敘述執行時)程式中的資料值就會寫入新的SAS資料集中

處理己存在的SAS資料集

使用STUDENT永久資料集建立一個新的SAS資料集,名稱為MALE,只有男同學的資料

l          DATA  STUD2;

l            SET  SSD.STUDENT;

l            IF  SEX=’M’ ;

l          PROC  PRINT;

l          RUN;

使用STUDENT永久資料集建立一個新的SAS資料集,名稱為MALE,將原身高的單位公分改為公尺,並除去SEX變數

l          DATA  STUD2;

l            SET  SSD.STUDENT;

l            HEIGHT=HEIGHT/100;

l            DROP  SEX;

l          PROC  PRINT;

l          RUN;

8.3        查看SAS的資料館

資料集管理和使用

9.資料值統計

9.1        一些總結統計的程式

導論

利用SAS的程序可用來作資料的總結,如計算總和,平均,頻率分佈和百分比等

SAS的很多程序會產生相同的統計結果,選擇那種程序來分析,可能是依據報表的呈現方式

總結程序

每個程序產生的報表不同外, 有的程序可將統計結果儲存成SAS資料集, 可供進一步分析使用

l          FREQ  製作頻度分佈和百分比,可產生結果資料集

l          CHART   總和,平均,頻度和百分比的圖型表現

l          MEANS  基本統計量和T測量 ,可產生結果資料集

9.2        描述性統計值

MEANS程序

MEAN程序可對數字變數計算描述性統計量

MEANS程序的一般格式為: PROC  MEANS  options;

一般的選項有DATA=資料集, MAXDEC=n指出報表中的小數點位數

統計選項有: CV  MAX  MIN  MEAN  NMISS  PRT  RANGE  STD  SUM  T  VAR

MEANS程序中使用的敘述有

CLASS 類別變數;  依類別分開統計, 可為數字或文字

VAR  分析變數;  指出欲統計的變數名稱

9.3        頻率分佈統計

FREQ程序

FREQ程序用以產生一維至N維的頻度交又表

FREQ敘述的一般格式為:   PROC  FREQ  DATA=SASdataset;

必須跟隨TABLE敘述,以指出要何變數的頻度分佈表, 其一般格式為: TABLES  table request / options;

例如:

l          TABLES  SEX;

l          TABLES  SEX  GROUP ;

l          TABLES  SEX*GROUP;

l          TABLES  SEX*GROUP*SEX;

TABLE 敘述的選項有

CHISQ  LIST  MISSING  NOCOL  NOCUM  NOPERCENT  NOPRINT  NOROW

9.4        柱狀圖表

CHART程序

CHART程序可用來總結資料並以文字圖型方式展現

圖型類別:直條圖,橫條圖,柱狀圖,pie chartstar chart

數值表現方式有:頻度,百分比,總和和平均

CHART敘述的一般格式為:   PROC  CHART  DATA=SASdataset;

可跟隨CHART敘述,以指出要何變數及圖型種, 其一般格式為:

VBAR  variable names / options;

HBAR  variable names / options;

BLOCK  variable names / options;

上列三敘述可用的選項有

TYPE=FREQ,CFREQ,PCT,CPCT,SUM,MEAN

SUMVAR=variable name

現今圖型介圖發展完整,一般多用GCHART程序

10.        SAS資料集的維護

10.1 複習DATA步驟中的敘述

修改SAS資料集

SAS資料集可被下列方式更改

l          加入新變數(利用指定敘述)

l          選擇觀測值子集(IF, DELETE敘述)

l          選擇變數(資料集選項KEEP,DROP)

l          合併兩個或多個SAS資料集(SET,MERGE,UPDATE)

DATA步驟中使用下列敘述讀取SAS資料集

l          SET  從一個或多個SAS資料集讀取觀測值資料

l          MERGE  從兩個或多個SAS資料集合拼觀測值

l          UPDATE  以一個資料集更新主檔

10.2 合併SAS資料集

SET敘述

SET敘述可讀取一個或多個己存在的SAS資料集

SET敘述的一般格式為:  SET  SASdatsets;

l          一個SET敘述可同時讀取多個SAS資料集

l          內定讀入的觀測值順序是一個資料集接著一個資料集

l          假如配合使用BY敘述,觀測值是依鍵大小一筆一筆排入

l          如使用BY敘述,資料集必須先排序

l          結果資料集中包含所有讀入資料集的變數,除非使用KEEPDROP敘述

合併MALEFEMALE資料集,成為STUDENT資料集

l          DATA  STUDENT;

l             SET  MALE  FEMALE;

l          RUN;

依姓名大小合併MALEFEMALE資料集,成為STUDENT資料集

l          PROC  SORT  DATA=MALE;  BY  NAME;

l          PROC  SORT  DATA=FEMALE;  BY  NAME;

l          DATA  STUDENT;

l             SET  MALE  FEMALE;

l             BY  NAME;

l          RUN;

MERGE敘述

MERGE敘述用以合拼相當的觀測值,從二個或多個SAS資料集

MERGE的一般敘述為:  MERGE  SASdatasets;

l          DATA步驟中一個MERGE敘述可同時合併多個資料集

l          充許沒有使用BY敘述的合併(一對一合併)

l          使用BY敘述的合併稱為配對合併

l          使用BY敘述作配對合拼時,資料集必須先依配對鍵值排序

l          結果資料集中包含所有讀入資料集的變數,除非使用KEEPDROP敘述

11.        和其他軟體的轉換

11.1 SAS資料集轉成一般文字檔

FILEPUT敘述

FILEPUT敘述可將SAS資料集寫至一個外部文字檔

DATA步驟中是可執行的敘述

就如同INFILEINPUT敘述

FILE的一般格式為: FILE  檔案磁碟目錄名稱’;

PUT敘述用以定義以何種格式將資料寫出,其一般格式為:

PUT  變數名稱  格式  定位符號 …;

將資料寫至外部檔

DATA  _NULL_;

  SET  STUDENT;

  FILE  ‘C:\STUDENT.TXT’;

  PUT  NAME $8.  2  SEX $1.  HEIGHT 8.2 ;

RUN;

11.2 讀寫DBASE檔案

PC中存有一附檔名為DBF的資料檔,檔名為urine.dbf,現在欲把它轉為SASDATASET,檔名取為uu

1.直接利用PROC DB3;程序讀取

l          FILENAME jim 'urine.dbf';

l          PROC DBF DB3=jim OUT=uu;

2.先在DBASE軟體中,將檔案轉為ASCII,而後再以一般SAS讀取資料(INFILEINPUT)的方式讀入資料

DBASE軟體中

l          .USE URINE

l          .COPY TO UU SDF    &&產生一文字檔,檔名為UU.TXT

l          .QUIT

書寫一SAS程式

l          DATA uu;

l          INFILE 'uu.txt' LRECL=n PAD;

l          INPUT id .......;

注意:DBASE軟體無法處理MISSING的資料。建議:DBASE的欄位全部設為文字型態, 利用DBASE的資料管理能力來管理資料。用DBASE檔轉換為ASCII檔的方式,讀取資料成SAS,作統計分析。

注意:在DBASE中如果有刪除資料,經SASPROC  DBF處理時,仍會將刪除的整筆資料轉入。

11.3 讀寫EXCEL檔案

可在SASMAIN MENU中選FILE中的IMPORTEXPORT,即可將多種不同格式的資料轉入或轉出。

以下使用proc access程序轉換DBASE檔至SAS

l          proc access dbms=dbf;

l          create work.dbase.access;

l          path="c:\class\dbase.dbf";

l          assign=yes;

l          create work.dbase.view;

l          select all;

l          subset where delete_f=' ';

l          run;

以下使用proc dbload程序轉換SAS檔至DBASE

l          proc dbload dbms=dbf data=dbase;

l          path="c:\class\dbase2.dbf";

l          load;

l          run;

以下使用proc access程序轉換EXCEL檔至SAS

l          proc access dbms=excel;

l          create work.excel.access;

l          path="c:\class\excel.xls";

l          getnames=yes;

l          scantype=5;

l          assign=yes;

l          create work.excel.view;

l          select all;

l          run;

以下使用proc DBLOAD程序轉換SAS檔至EXCEL

l          proc dbload dbms=excel data=excel;

l          path="c:\class\excel.xls";

l          putnames=y;

l          LIMIT=0;

l          load;

l          run;

12.        綜合練習

12.1 研究內容描述

計劃內容

8281日某一研究血壓計劃,分三組共計50人參與,分六次測量血壓,每次測三次,另有九人參與24小時血壓測量,即每格1小時測量一次

資料檔

BASE1.DAT  BASE2.DAT  BASE3.DAT 三組人的基本資料, 含姓名,性別, 綿號,出生日和地址base1.dat, base2.dat, base3.dat

BP.DAT  六次測量的血壓資料,資料內容為, 編號, 測量天次,日期, 身高,體重, 溫度, 第一次收縮壓,舒張壓,脈搏 第二次第三次; bp.dat

BP24.DAT  24小時血壓記錄,資料內容為姓名,性別,0時血壓測量,1,2,3,…23時血壓測量bp24.dat

12.2 習題

合併基本資料

個別建立三個基本資料檔,並用SET敘述將三檔併成BASE資料集

查看筆數是否相符

計算計劃中個案的平均,標準差及最大最小年齡

同上題,分組計劃

計算男女個案的平均年齡是否有差異

計算三組的平均年齡是否有差異

讀取24小時血壓記錄

計算個案24小時的血壓變異數

分別計算個案白天及晚上的的血壓變異數及平均血壓

計算白天和晚上的血壓變異及平均是否有差異

讀取血壓記錄

計算一天測量三次的平均血壓: 如收縮壓變異在5以下,取平均,否則取中位數

計算第0天血壓平均測量值在三組中是否有差異