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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

很全的sas基础知识

發布時間:2023/12/2 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 很全的sas基础知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

5.1 SAS表達式簡介
  1.SAS常數表達式
  (1)數值常數 如: 1.23、 -5、 0.5E-10。
  (2)字符常數 如: name1='TOME'、 name2='MARY'、name3='JOHN'。
  (3)日期(d)、時間(t)、日時(dt)常數 如: d1='01JAN80'd、t1='9:25:19't、
  dt1='18JAN80:9:27:05'dt。
  (4)16進制常數(略)
  2.SAS運算符
  (1)前綴算符與后綴算符
  前綴算符, 即正號或負號; 如: +Y; -25; -COS(30); +(X*Y); 后綴算符,即兩個運算對
  象之間的運算符號, 如: 1+9; 4-2; 6<8。
  (2)只含一個運算符的簡單表達式(Ⅰ組)和含有多于一個運算符的復合表達式(Ⅱ組)
  Ⅰ組, 如: A+B; C-D; E*F; G/H; Ⅱ組, 如: 1-EXP(N/(N-1)); 100-LOG(N*(N+1));
  (3)操作運算的順序
  求一個復合表達式的值時, 其操作運算的順序和優先級遵從如下的規則(見表5.1):
  表5.1     SAS的運算符及其在運算順序上的優先級
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  優先級組別    運 算 符 號   等價表示      運算符號含義之說明
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  第 0 組      ( )                 括號
  第 1 組     **  +   -              乘方, 正數, 負數
  ^   ><  <>   NOT  MIN  MAX   邏輯非, 最小, 最大
  第 2 組     *  /                 乘, 除
  第 3 組     +  -                 加, 減
  第 4 組     ‖或||                 字串連接
  第 5 組     <   <=      LT LE       小于, 小于等于
  =   ^=      EQ NE       等于, 不等于
  >=  >      GE GT       大于等于, 大于
  IN         等于一列元數中的某一個
  第 6 組     &         AND         邏輯與
  第 7 組     |或|       OR         邏輯或
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  各組的計算順序分別為: 第0組由內向外;其他各組均自左至右。第4組和第7組都給出了
  兩種運算符號, 這是因為不同的系統可能只認識其中的某一種

  5.2 SAS函數簡介
  SAS軟件中共有13類147個SAS函數, 現將其中最常用者的用法作一扼要介紹。
  1.算術函數
  (1)求一個數的絕對值的函數ABS和求一個正數的算術平根的函數SQRT
  如求-250的絕對值的語句為x=ABS(-250)、求625的算術平根的語句為y=SQRT(625)。
  (2)求若干個數的最大值的函數MAX和最小值的函數MIN
  DATA;  a1=2; a2=-9; a3=15; a4=-23; x=MAX(of a1-a4);?
  y=MIN(of a1-a4);  FILE PRINT;  PUT x y;  RUN;  ?
  程序運行結果為∶x=15、y=-23。
  2.截取函數
  (1)取一個數的整數部分的函數INT、按規定舍入精度取一個數的近似值的函數ROUND;
  (2)取≥自變量的最小整數的函數CEIL、取≤自變量的最大整數的函數FLOOR
  DATA;                           運行結果
  a=INT(223.456); b=ROUND(223.456, 100);          a=223  b=200
  c=ROUND(223.456,10); d=ROUND(223.456,1);         c=220  d=223
  e=ROUND(223.456,0.1); f=ROUND(223.456,0.01);       e=223.5 f=223.46
  g=CEIL(2.4); h=CEIL(-2.4); i=FLOOR(2.4); j=FLOOR(-2.4);  g=3   h=-2
  FILE PRINT; PUT a b c d e f g h i j; RUN;        i=2   j=-3
  3.數學函數
  (1)以e為底的指數EXP、自然對數LOG(以e為底)、以2為底的對數LOG2和常用對數函數
  LOG10(以10為底)
  DATA; a=2; b=2.718281828; c=10; w=EXP(a); x=LOG(b);?
  y=LOG2(a); z=LOG10(c); FILE PRINT; PUT w x y z; RUN;
  程序運行結果為∶w≈7.389056、x≈1、y=1、z=1。
  (2)正弦SIN、余弦COS、正切TAN以及它們的反函數ARSIN、ARCOS、ATAN
  u=SIN(a); v=COS(a); w=TAN(a);        這里a的單位是弧度, u,v w是實數;
  x=ARSIN(b); y=ARCOS(b); z=ATAN(b);     這里b是實數, x, y, z是弧度。
  4.概率函數
  (1)泊松函數POISSON和二項概率函數PROBBNML
  求概率P=∑nj=0 e-λ(λj/j!),函數的格式是: POISSON(λ,n),當λ=1、n=2時, 程序為:
  DATA; P=POISSON(1, 2); FILE PRINT; PUT P; RUN;  結果是: P=0.9197。
  求概率P=∑mj=0 CjnPj(1-P)n-j,函數的格式是:PROBBNML(p,n,m),當p=0.5、n=10、m=4時,?
  程序為:
  DATA; P=PROBBNML(0.5,10,4); FILE PRINT; PUT P; RUN; 結果是: P=0.37695。
  (2)在標準正態、'學生't、卡、F下, 若給定橫坐標上的分位點和
  自由度的值, 可求出隨機變量小于等于該分位點值的概率, 其語句的形式如下:
  Pu=PROBNORM(u); Pt=PROBT(t, df); Px=PROBCHI(x, df); Pf=PROBF(f,ndf,ddf)
  這里, u、t、x、f分別代表服從標準正態、中心t、中心卡、中心F
  的隨機變量所取的分位點的值, df為自由度, ndf、ddf分別為F統計量中分子、分母的自由
  度(下同),Pu、Pt、Px、Pf為各隨機變量取值小于給定分位數的概率。
  5.分位數函數
  在標準正態、'學生't、卡 、F下, 若給定左側尾端的概率P和自由度df
  的值, 可求出橫坐標上的分位點的數值, 其語句的形式如下:
  ①u=PROBIT(P); ②t=TINV(P, df); ③χ2=CINV(P,df); ④F=FINV(P,ndf,ddf)
  注意:實際使用時,常需計算出與右側尾單的概率相對應的分位數,故可令P=1-alpha,
  這里,alpha就是事先規定的右側尾端概率。
  6.樣本統計量函數
  給定一組定量數據Xi, i=1, 2, …, n, 欲求15種樣本統計量之中某些統計量的值時,可
  用相應的樣本統計量函數計算;若同時想得到所有這些值,可直接用UNIVARIATE過程計算。樣本統
  計量函數在語句中的形式如下(以求樣本均數的函數MEAN為例,其他用法相同):
  A1=MEAN(of X1-Xn);或A2=MEAN(X1, X2, …, Xn); 第1種形式適合事先給變量X1~Xn賦
  了值的場合; 第2種形式適合直接將具體數代入括號內)。
  7. 日期函數
  由兩富同日期計算出它們之間的天數,可用INTCK函數。如:
  A='01JUN93'D; B='01JUN94'; C=INTCK('DAY', A, B); 則C=365(天)。其他從略。

  5.3 SAS語句簡介

  Ⅰ.用在DATA步的文假作語句
  1.DATA語句 表示一個數據步的開始, 并給出正被創建的SAS數據集的名字。
  (1)格式: DATA [SASdataset[(dsoptions)]]…;
  (2)說明: SASdataset是這個DATA步正被創建的一個或幾個SAS數據集的名字;dsoptions
  告訴SAS系統關于正被創建的SAS數據集的更多的信息。
  (3)SAS數據集的名字的種類
  ①省略數據集名 DATA; 等價于寫: DATA _DATA_;每運行一次,SAS系統自動給創建的數
  據集依次命名為DATA1, DATA2, …。
  ②單水平名字 DATA ABC; SAS系統自動命名為WORK.ABC,這里WORK是隱含的第一水平名
  字,即庫名, 徹底退出SAS系統時,此數據集就消失了, 故稱為臨時數據集。ABC是第二水平名
  字,它可以由不超過8個字符組成。
  ③雙水平名字 DATA WWW.ABC; 這里WWW是庫標記, 它靠LIBNAME語句建立起與某個目錄
  之間的聯系,如: LIBNAME WWW 'C:\HULP'; DATA WWW.ABC;枕明想在C盤的目錄名為HULP
  下建立一個名為ABC.SSD的永久數據集,“.SSD”是SAS系統自動加的, 此文件只供SAS系統調
  用,用戶無法直接閱讀。調用方式為:LIBNAME WWW 'C:\HULP';PROC 過程名 DATA=WWW.ABC;
  再寫其他SAS語句。
  ④特殊的數據集名 DATA _NULL_; 和 DATA _LAST_;前一個語句表明只想用PUT語句來輸
  出一些結果, 但不想創建SAS數據集,可減少使用計算機的資源; 后一個語句表明SAS系統使用
  一個稱為_LAST_的特殊自動變量來保留在一個SAS程序里最新創建的SAS數據集。注意: 在進
  入SAS DMS后要建立的第一個數據集名不能用_LAST_。
  ⑤同時使用多個數據集名 如果你想對一組含有年齡和另外10個變量的資料按青年、中
  年、老年創建三個數據集, 可用如下的方法實現:?
  DATA ONE TWO THREE; INPUT AGE X1-X10; IF AGE<=35 THEN OUTPUT ONE;
  ELSE IF AGE>35 AND AGE<=55 THEN OUTPUT TWO;
  ELSE IF AGE>55 THEN OUTPUT THREE; CARDS;
  (4)dsoptions(即SAS數據集的選擇項)
  注意∶下面的②、⑥兩個選擇項僅當讀已存在的SAS數據集時有效。
  ①DROP=變量名列表 等號后面的所有變量將不出現在此數據集中;
  ②FIRSTOBS=n 從數據集中第n個觀測值開始處理;
  ③IN=變量名 在SET, MERGE或UPDATA語句里規定一個新變量的名字,其取值指示觀測從
  哪個數據集得到。如: MERGE ONE(IN=A) TWO; 即當前觀測取自ONE時, 則A=1,這一信息可用
  于DATA步中間的程序語句(如: IF A=1 THEN …), 但此變量不進入正被創建的SAS數據集中;
  ④KEEP=變量名列表 等號后面的所有變量將保留在數據集中;
  ⑤LABEL='單引號內寫標簽內容, 字符數應≤40';
  ⑥OBS=n n指被處理的已存在的數據集的最后一個觀測的序號;
  ⑦TYPE=DATA(或TYPE=CORR) 指定SAS數據集的類型, DATA指一般的數據集、CORR指結構
  為相關矩陣的數據集, 常由SAS過程自動產生;
  2.INFILE語句(輸入文件語句)?
  用來定義一個外部文件, 它需用INPUT語句讀取。外部文件可以是已存在磁盤上的, 也可
  以是從鍵盤上輸入的數據行。
  (1)格式: INFILE filespecification options;
  (2)說明: filespecification用來定義文件, options給出選擇項;
  (3)filespecification有以下三種形式:
  ①fileref(文件標志) ②'filename'(文件名) ③CARDS指明輸入的數據緊跟著CARDS語句,?
  如: INFILE 'C:\HULP\ABC.PRG' options; 這里C:\HULP是文件標志、ABC.PRG是文件名;
  又如: INFILE CARDS options; 這里CARDS相當于文件標志。
  (4)下列選擇項(options)可以出現在INFILE語句中:
  ①COLUMN=variable或COL=variable定義一個變量, 其值是指針所在的當前列位置。
  ②END=variable定義一個變量, 作為文件結束的標志。
  ③EOF=label是一個語句標號, 當INFILE語句讀到文件末尾時, 作為隱含的GOTO語句的目標。
  ④FIRSTOBS=linenumber要求從指定的行開始讀取數據, 而不是從文件的第一個記錄開始。
  ⑤LENGHT=variable定義一個變量, 其值是當前輸入數據行的長度。
  ⑥OBS=n指定從一個順序輸入文件中讀取數據的最后一個觀測(即第1~第n個觀測)。
  3.INPUT語句(輸入語句)?
  描述一個輸入記錄中數值的安排情竣給相應的SAS變量賦輸入值,該語句只能用于讀入
  存放于外部文件中的數據或跟隨在CARDS語句之后的數值。
  (1)一般形式: INPUT [specification]…;
  (2)說明: 在INPUT語句中有四種方式描述一個記錄值, 即
  ①列格式輸入(column) INPUT variable [$] startcolumn[-endcolumn] [.decimals];
  variable變量名,$指明其前面的那個變量是字符型的,數值型的變量則不寫$, 若這個變
  量在前面已被定義為字符袖量, $也不需寫; startcolumn是包含該變量值的輸入記錄的第
  1列的列號, -endcolumn是包含該變量值的輸入記錄的最后一列的列號。如果變量值只占一
  列, 則省去-endcolumn。 .decimals如果輸入值不包含一個隔開整數部分與小數部分的小數
  點,decimals用來指明小數部分的位數。如: INPUT number 10-15.2; 讀取number的數值時,
  小數部分是兩位。若輸入值分別是2314, 2, 400, -140, SAS以.2形式讀取的值依次是23.14,
  0.02,4.00,-1.40。又如: INPUT NAME $ 1-8 AGE 11-12; 這里1-8和11-12指列號。
  ②自由格式(free-format)或表格式輸入(list) INPUT variable [$] [&]…;
  variable變量名,&指明字符袖量值中可能在一處或多處含有單一的空格, 此時不同變
  量值之間需用兩個或兩個以上的空格隔開。如:
  INPUT NAME $ & AGE X1-X4; NAME的值可以形如: J. JONES或J. M. MARY。自由輸入格式
  適用場合:輸入的值彼此之間至少有一個空格隔開、用小數點(.)而不是空格表示缺失數據、
  字符型數值的最大長度為8個字節,除非在LENGTH、ATTRIB或INFORMAT語句中規定了字符袖
  量的長度。
  ③指定格式輸入(formatted) INPUT variable [formatmodifier] informat;
  variable變量名,formatmodifier修改輸入格式讀取數據的方式,有兩個格式修飾符:
  “:”和“&”,informat給出讀取數據時的輸入格式,它總是包括一個(·)或以(·)結尾,如:
  INPUT NAME $CHAR10. AGE 2.; 這里$CHAR10.和2.分別指定了字符袖量NAME和數值袖量
  AGE的輸入格式; 當輸入的值都是以同一方式排列時,就可以用組格式表來表示格式。該格式
  表是被循環使用的, 直到所有變量都被賦值;帶有序號的變量值可用簡單的形式列出來, 如:
  INPUT X1-X5 (4.1); 這表明5個變量的值都按整數部分占兩位,小數部分占一位的格式輸入,
  加上小數點共4位。兩個格式修飾符的含意: “:”把輸入格式與自由格式輸入的掃描特征結
  合起來,表明變量的值是從以下非空格列中讀取的, 直到第1次遇到以下三種情況: 下一個空
  格列、先前定義的變量長度已讀滿、數據行結束;“&”表明一個字符型輸入值可能含有一個
  或多個嵌在當中的單個空格,此時,不同的數據之間應該用兩個以上的空格隔開。
  ④命名格式輸入(named) INPUT {pointercontrol}variable={$}{informat};
  “=”指明使用的是命名格式輸入方式。如: INPUT NAME = $ AGE =;
  (3)高級INPUT語句 用指針來跟蹤讀取數據的位置。
  ①列指針控制: 絕對和相對列指針控制符分別為“@”和“+”,其作用是把指針移到指
  定的列,“@5”與“+5”的區別是: “@5”是把指針直接移到每行的第5列、而“+5”是把指
  針從當前的位置向后移動5列。有9種列指針控制:?
  @n 把指針移到第n列。如:INPUT @15 AGE 2.;把指針移到第15列, 從數據行的第15-16
  列讀數據值賦給變量AGE。
  @pointvariable 把指針移到指針變量所指的列。如: A=15; INPUT @A AGE 2.;?
  @(expression) 把指針移到表達式值所指的列。如: A=5; INPUT @(A*3) AGE 2.;
  @'characterstring' 把指針移到數據行中字符串charaterstring之后的第一個非空格
  列。
  @charactervariable 首先確定字符變量所取值(即字符串)在輸入行的位置,然后把指針
  移到這個字符串之后的第一個非空格列。
  @(characterexpression) 先確定字符表達式值的位置,然后移指針到其后第一個非空格
  列。
  @+n 把指針向右移動n列。如: INPUT @20 AGE 2. +4 WEIGHT;
  @+pointvariable 把指針移到指針變量值所指的列。如: A=-2; INPUT X 1-15 +A Y 2.;
  此語句表明從數據行的1-15列取值賦給變量X, 然后指針左移2列從第13列開始取值賦給變量Y。
  @+(expression) 把指針移到表達式所指的列。如: INPUT X 1-15 +(-2) Y 2.;
  ②行指針控制: 其控制符有“#”和“/”, 其作用是把指針移到指定的行。有4種行指
  針控制:
  #n 把指針移到第n行。 
  #pointvariable 把指針移到指針變量值所指的行。
  #(expression) 把指針移到表達式值所指的行。
  / 把指針移到下一行的第一列。如: INPUT NAME $ SEX $ / AGE WEIGHT;
  ③行固定標識符: @和@@兩種, 寫在INPUT語句的結尾, 其區別在于:
  一個數據行用多個INPUT語句讀取數據, 用一個@結尾;一個輸入行數據含有多個觀測值,
  用兩個@@結尾。
  4.FILE語句(文件語句)?
  定義當前的輸出文件, 并且是一個外部文件,一般要與PUT語句配合使用。其選擇項可用
  來控制文件輸出的形式, 還可定義變量來跟蹤指針所在的當前行和列的位置、定義在每一個
  新的輸出頁中開始打印的抬頭。在同一個DATA步中可用多個FILE語句,它是可執行語句,故可
  用于條件(IF-THEN)語句中, 也可用到其他一些語句。
  (1)格式: FILE filespecification [options];
  (2)說明: filespecification用來定義外部文件, options給出選擇項;
  (3)filespecification可有如下形式:
  ①fileref給出文件標志, 也是PUT語句輸出的對象, FILENAME語句把一個外部文件同
  fileref聯系起來;
  ②'filename'定義外部文件的全名字, 文件名要寫在單引號內;
  ③LOG如果在PUT語句之前不使用FILE語句或使用該語句, 但形式為FILE LOG options;?
  其輸出內容都將送到LOG窗口內;
  ④PRINT把PUT語句產生的數據行輸出到標準SAS打印文件中去(若用 “FILE PRINT?
  options;”形式, 則將內容直接送到OUTPUT窗口中去)。
  (4)用來控制當前輸出文件形式的選擇項很多,從略。
  5.PUT語句?
  把內容輸出到SAS系統的LOG窗口、 SAS過程中的輸出文件或任何在FILE語句中定義過的
  文件中去。由最近的FILE語句指明的文件叫當前輸出文件。若在當前的DATA步執行中,PUT語
  句前沒有FILE語句,則PUT語句把內容輸出到LOG窗口。PUT語句可以輸出變量值或字符串。輸
  出變量值有以下三種方式:列輸出格式、自由格式和指定格式。
  (1)格式: PUT [specification]…;
  (2)說明: specification指的是變量的值或字符串內容是以何種形式輸出的。
  (3)specification的具體內容有:
  ①variable列出要輸出的變量名;?
  ②'characterstring'指明在PUT語句中要輸出的字符串,字符串一定要寫在單引號內;?
  ③pointcontrol把指針移到規定的行和列上;?
  ④_INFILE_輸出當前輸入文件或CARDS后面的數據行中的最后一行;?
  ⑤_ALL_輸出所有變量的值,包括_ERROR_,_N_,以及在DATA步中用命名式輸出定義的變量。
  PUT語句可以沒有specification,如: PUT;它把當前輸出行的內容輸出到當前文件中去,即使
  當前行是空的, 也是如此。
  (4)列格式輸出 PUT [variable][=] [$] startcolumn[-endcolumn] [.decimalplaces];
  “=”在輸出變量值的同時寫上變量的名字及其符號, 其他項的含義見INPUT語句中相應
  部分。
  (5)自由格式輸出 PUT variable[=] [$];
  variable輸出變量名,=指定變量值用命名的方式輸出,$字符袖量的標志。
  (6)指定格式輸出 PUT variable[=] format.;
  =指定變量值用命名的方式輸出,其它項的含意見INPUT語句中指定格式輸入的相應部分。
  (7)指針控制與格式修飾符 關于指針控制參看INPUT語句中相應部分, 這里對不同之處
  作些介紹。
  ①_PAGE_把指針移到新的一頁的第一行 PUT _PAGE_;
  ②OVERPRINT把當前輸出內容輸出到前一個輸出行中 例如要在標題“TITLE OF PAGE”
  下面加一橫線, 其語句是: PUT 'TITLE OF PAGE' overprint '_____________';
  ③格式修飾符“n*”指明其后的格式將被重復使用n次。如: PUT X1-X5 (5*7.2);
  ④格式修飾符“:”,它后面跟一個格式, 指明用此格式輸出變量值, 但要去掉前面或后
  面的空格, 不同數值之間只留一個空格;
  ⑤輸出數組元素: PUT array{*}; 數組不能是臨時數組,*處不能是數組指示變量, 但可
  以是在PUT語句執行時可估值的任何SAS表達式,也可直接用*號。
  6.SET語句
  從一個或幾個SAS數據集中讀取觀測值。此語句的適用場合:
  ①完全復制現存的數據集;
  ②把一個數據集分成幾個子數據集;③把幾個現存的數據集合并成一個新數據集。
  (1)格式: SET [[SASdataset(dsoptions IN=name)…][setoptions]];
  (2)說明: SASdataset指定一個或幾個現存的SAS數據集。在一個SET語句中最多可以指
  定50個數據集;dsoptions是數據集的選擇項; name是產生一個新變量,在DATA步中,如果這個
  數據集對當前的觀測有貢獻,其值為1,反之為0;setoptions定義SET語句的選擇項。
  (3)數據集的選擇項(dsoptions) 參見DATA語句中相應部分。
  (4)SET語句的選擇項(setoptions) 
  ①NOBS=name產生一個變量,其值是輸入數據集的觀測總數。如果多于一個數據集列在SET
  語句之后,NOBS的值就是所有這些數據集中觀測總數。該變量不含在新產生的數據集中。
  ②END=name產生一個變量,作為文件結束的標志。該變量的初值為0,當SET語句讀完輸入
  數據集的最后一個觀測或合并后的數據集的最后一個觀測時,其值為1。
  (5)復制新的數據集 把數據集A復制成數據集B的方法: DATA B; SET A;
  (6)由數據集A生成含有部分變量的子集B,可用下面3種方法之一來實現:
  ①在SET語句中使用DROP=或KEEP=的數據集選擇項,如: DATA B; SET A(KEEP=X Y);
  ②在DATA步中使用DROP與KEEP語句,如: DATA B; SET A; KEEP X Y;
  ③在DATA語句中使用DROP=或KEEP=選擇項,如: DATA B(KEEP X Y) C(KEEP Y); SET A;
  (7)由數據集A生成含有部分觀測的子集B,一般要借助子集IF語句來實現,如:DATA B; SET A;
  IF SEX='M';最后一句還可寫成:IF SEX='M' THEN OUTPUT;或IF SEX^='M' THEN DELETE;
  其目的都是選擇SEX的值為M的觀測作為新生成數據集的觀測。
  (8)由數據集A生成含有新產生的變量的數據集B,如:DATA B; SET A; TOTAL=SUM(OF X1-X5);
  (9)數據集的連接 把若干個數據集按先后次序一個一個的連接起來,形成一個大數據集。
  ①相同變量的數據集的連接,如:DATA C; SET A B;
  ②不同變量的數據集的連接,如果SET語句后列出的數據集中含有的變量不全相同, 則從
  一個數據集中來的觀測對于那些只有在其它數據集中定義的變量,其值為缺失值。
  (10)按已排好的順序合并數據集 要先用SORT過程排序,再借助BY和SET語句來實現,如:
  PROC SORT DATA=A; BY X; PROC SORT DATA=B; BY X; DATA C; SET A B; BY X;
  7.MERGE語句(合并語句)?
  把兩個及以上數據集中的觀測合并成一個觀測作為新生成的數據集的觀測(即一一對應地
  左右連接),合并觀測時的方式依賴于是否有BY語句伴隨著MERGE語句。
  (1)格式: MERGE SASdataset[(dsoptions IN=name)]
  SASddataset[(dsoptions IN=name)]…[END=name];
  (2)說明: END=name產生一個變量標志著文件的結束,其初值為0,當MERGE語句執行到最
  后一個觀測時,其值為1,該變量不包括在正被創建的數據集中。其他項的含義參見SET語句。
  (3)一對一合并(沒有BY語句)
  當沒有BY語句伴隨MERGE語句時, MERGE語句使全部數據集中的第i個(i=1,2,…)觀測依次
  合并成一行, 成為一個新的觀測。新生成的數據集中觀測總數為全部數據集中觀測個數的最
  大值。如果某數據集的觀測較少,合并后,短缺的那些觀測將以缺失值的形式出現; 如果某一
  個變量同時出現在幾個數據集中,合并后,只有一個變量,其值是列在MERGE語句中含該變量的
  最后那個數據集所對應的數。
  (4)匹配合并(帶有BY語句)
  如果想把兩個或兩個以上數據集按照一些變量值合并,則需借助BY語句來實現,一個MERGE
  語句只能有一個BY語句相伴隨, 并且,各數據集中至少有一個變量(稱為BY變量)是相同的,每
  個數據集必須先按這些變量排序。
  8.UPDATE語句(更新語句)?
  該語句有一個特殊功能, 即用數據集乙(稱為修改數據集) 去修改數據集甲(稱為主數據
  集)。該語句一定要用BY語句伴隨,BY語句給出合并觀測時的共同變量的名字; 主數據集中不
  能含有多于一個的共同變量值相同的觀測。產生的新數據集包含主數據集中的所有觀測, 如
  果修改數據集含有主數據集中沒有的觀測,則這些觀測出現在新的數據集中。
  (1)格式: UPDATE masterdataset dsoptions [(IN=variable1)
  transactiondataset [(dsoptions IN=variable2)] [END=variable];
  (2)說明: master...和transaction...分別為主數據集名和用以修改的數據集名,其他
  項參見SET和MERGE語句。
  9.BY語句?
  在DATA步中用以控制MERGE、SET或UPDATE語句的運行并建立特殊的組合變量。
  (1)格式: BY [DESCENDING] [GROUPFORMAT] variable … [NOTSORTED];
  (2)說明: DESCENDING指明數據集是按下降的次序對其后的變量值進行排序、GROUPFOR-
  MAT是當SAS給自動變量FIRST.和LAST.賦值時, 指明該語句中的變量是按其格式化值使用的,
  若缺省, 則用非格式化值、variable定義數據集用以排序的每個變量名、 NOTSORTED指明具
  有同BY值的觀測組合在一起, 但BY值不必按字母或數字順序排列, 此選擇項可出現在BY語句
  中任何地方。
  10.CARDS與CARDS4語句
  該語句標志著后面緊跟著數據行。通常用前者, 格式為: CARDS;并用一個分號(獨占一
  行)作為數據行結束的標志; 當數據行中含有分號作為輸入數據時,用后者,格式為: CARDS4;
  并用4個連續的分號“;;;;”(獨占一行)作為數據行結束的標志。
  Ⅱ.用在DATA步的運行語句
  1.賦值語句
  如∶X=3; 或Y=a+b; 注意∶此處a、b是事先已賦過值的變量或是具體的數值。
  2.累加語句
  如∶N+1; 開始N被置為0,以后DATA步每執行一次,N的值就增加1。
  3.DELETE語句
  如∶DATA abc; INPUT x @@; IF x>100 THEN DELETE; CARDS; (數據行); RUN;
  所建立的SAS數據集abc中就不會包含大于100的數值。
  4.LOSTCARD語句
  當每個觀測寫成幾個數據行時,若當前觀測丟失其中的一行或幾行,LOSTCARD語句可以
  防止SAS系統從下一個觀測的數據行讀數據作為當前觀測的一部分。如∶
  DATA abc;                     103 C
  INPUT id1 x$ #2 id2 y #3 id3 z$;         103 C
  IF id1 NE id2 OR id2 NE id3 THEN LOSTCARD;    104 D
  CARDS;                      105 E
  101 A                      105 E
  102 B                      105 E
  102 B                      ;
  103 C                      RUN;
  [說明] 此例中,DATA步每三個數據行作為一個觀測。第1、4兩個觀測都丟失了兩個記
  錄;第2個觀測丟失了一個記錄;第3、5兩個觀測是完整的。 新建立的數據集abc中只有
  兩個完整的觀測,不完整的觀測不會進入新建的數據集。
  5.STOP語句與ABORT語句
  按規定條件停止處理當前執行的DATA步,并繼續執行其后的DATA語句或PROC語句。兩者
  的區別在于∶STOP語句屬于正常停止執行當前DATA步,不輸出出錯信息; 而ABORT語句屬于
  異常中止執行當前DATA步,輸出出錯信息。使用的方法是∶
  IF (條件) THEN STOP;   IF (條件) THEN ABORT; ?
  6.WHERE語句
  該語句允許用戶在SAS系統把觀測讀入DATA步之前從已存在的SAS數據集中選擇符合特殊
  條件的觀測,常放在SET(設置)、MERGE(合并)、UPDATE(更新)語句之后使用。如∶
  DATA one; SET aaa; WHERE x<100; RUN;
  在把已存在的SAS數據集aaa復制到新數據集one之前,阻止aaa中與x≥100對應的所有觀測進
  入one中去。
  WHERE語句不是可執行語句,它不能作為IF━THEN語句的一部分。它與子集IF語句的主
  要區別在于∶在可用WHERE和子集IF語句時,WHERE語句的效率高得多;而子集IF語句可用在
  DATA步的任何地方。
  7.OUTPUT語句(輸出語句)
  該語句告訴SAS系統輸出當前這個觀測到正被創建的數據集中。當用戶需要在以下三種
  情況下控制觀測值的正常輸出時,OUTPUT語句很有用∶
  ①從每行輸入數據創建二個或更多觀測; ②從一個輸入文件創建幾個SAS數據集;③把
  幾個輸入觀測組合成一個觀測。如∶
  DATA a; DO i=1 TO 10; INPUT x @@; OUTPUT; END; RUN; (上述用途①)。
  DATA b; IF x<50 THEN OUTPUT b1; ELSE OUTPUT b2; RUN; (上述用途②)。
  8.LIST語句(列表語句)
  在LOG窗口列出正被創建的這個觀測的輸入數據行,格式為∶LIST;
  9.DISPLAY語句(顯示語句)
  顯示用戶用WINDOW語句創建的窗口,將與WINDOW語句一起介紹。
  10.CALL語句(調用語句)
  在DATA步,該語句引入或調用一個程序。格式為∶CALL 程序名 (參數,……);
  程序名包括以下四類∶
  ①隨機數函數 如∶RANBIN,RANCAU,等等,各函數的詳細用法請看SAS說明書。
  ②SOUND 產生聲音。格式為∶CALL SOUND(頻率─每秒周期數,持續時間─常用1/180秒);
  ③SYMPUT 允許用戶創建一個宏變量或指定新的值給已存在的那個宏變量。格式為∶
  CALL SYMPUT(macrovar,value); 其中macrovar和value可以是DATA步的變量名,顯示字符串
  (放在引號內),或表達式。
  ④SYSTEM 發布操作系統命令。格式為∶CALL SYSTEM (command);
  如∶DATA _null_; CALL SYSTEM('DIR *.SSD'); RUN; 此程序將顯示全部永久數據集名。
  11.MISSING語句(缺失語句)
  用該語句聲明輸入的數據中表示特殊缺失值的一些確定值。格式為∶MISSING values;
  其中values可以是字母表中26個大寫(不能小寫)字母中的任一個或下橫線(_)。如∶
  MISSING A R; 則表明數據中用A、R表示的數皆為缺失數據。
  Ⅲ.用在DATA步的控制語句
  1.DO語句(循環語句)?
  DO與END之間的語句稱為一個DO組,任意多個DO組可以嵌套。
  (1)簡單DO語句 
  格式為∶DO; 常用在IF-THEN/ELSE語句里指定一個語句組是否被執行。如∶
  IF x>5 THEN DO; y=x*10; PUT x= y=; END; z=x+3;
  這些語句表明DO與END之間的兩句僅當x>5時被執行,否則,跳到賦值語句z=x+3去執行。
  (2)循環DO語句 
  格式為∶DO 下標變量=初值 [TO 終值 [BY 增量] [WHILE|UNTIL(表達式)]]…;如∶
  ①DO i=1 TO 10;②DO i=1 TO 10 WHILE(x<y);③DO i=2TO20 BY2 UNTIL((x/3)>y);
  ④DO i=0.1 TO 0.9 BY 0.1, 1 TO 10 BY 1, 20TO 100 BY 10;
  (3)DO OVER語句 
  格式為∶DO OVER 數組名; 該語句對隱含下標數組元素執行DO組里的語句。如∶
  DATA test;        DO OVER s;      CARDS;
  INPUT sc1-sc5;       s=s*100;     0.95 0.88 0.57 0.90 0.65
  ARRAY s sc1-sc5;    END;         ;
  (程序的第1部分)    (程序的第2部分)       (程序的第3部分)
  這里的“DO OVER s;”等價于“DO _i_=1 TO 5;”。
  (4)DO WHILE語句
  格式為∶DO WHILE(表達式); 如∶n=0; DO WHILE(n LT 5); PUT n=; END;
  只要n<5,DO組中的語句被執行。
  (5)DO UNTIL語句
  格式為∶DO UNTIL(表達式); 如∶n=0; DO UNTIL(n>=5); PUT n=; n+1; END;
  這些語句重復被執行直到n≥5時停止。
  2.END語句
  END語句是組成DO組或SELECT組的SAS語句中的最后一個語句。格式為∶END;
  3.SELECT語句(選擇語句)
  格式為∶SELECT [表達式]; WHEN (表達式) 語句; …… [OTHERWISE 語句;] END;
  該語句開始一個SELECT組,在組內,當一個特殊條件成立時, 從WHEN語句選擇一個SAS語句
  來執行,至少必須出現一個WHEN語句。 如果WHEN條薊成立,選擇OTHERWISE語句執行一個
  規定的語句。END語句結束SELECT組。如∶
  DATA new;        SELECT(a);           OTHERWISE x=1;
  SET old;         WHEN(1) x=x*10;       END;
  x=UNIFORM(0);       WHEN(2);          RUN;
  WHEN(3) x=x*100;
  (程序的第1部分)    (程序的第2部分)       (程序的第3部分)
  這是假定原有數據集old中的變量a的取值為1,2,3或缺失。 當a依次取這些值時,變量x
  按要求分別作了如下變換∶x*10、不變、x*100、x=1。
  4.IF語句
  (1)條件IF語句
  ①IF─THEN語句
  格式為∶IF 表達式 THEN 語句; 如∶IF x=3 THEN y=x;
  ②IF─THEN/ELSE語句
  格式為∶IF 表達式 THEN 語句; ELSE 語句; 如∶
  IF year=1984 THEN COLOR='BLUE'; ELSE COLOR='RED';
  (2)子集IF語句
  格式為∶IF 表達式; 如∶IF sex='F'; 產生的子數據集僅包含sex值為'F'的那些觀測。
  5.Go?TO語句(無條件轉移語句)
  格式為∶GO TO 語句標號; 該語句常出現在IF─THEN語句中作為THEN的分句。如∶
  DATA a;            x=3;         CARDS;?
  INPUT x y;          count+1;       (數據行)
  IF 1<=x<=5 THEN GO TO ok;  ok: sumx+x;      ;
  (程序的第1部分)       (程序的第2部分)   (程序的第3部分)
  如當前輸入的數據行中x值屬于[1,5]時,轉移到用標號ok指示的目標語句,并從該語句往下
  執行。
  6.LINK語句(連接語句)
  格式為∶LINK 語句標號; 該語句通知SAS系統立即轉到由LINK語句指示的語句標號并從
  那里開始繼續執行語句直到一個RETURN被執行。用法與GOTO語句類似,區別見RETURN語句。
  7.RETURN語句(返回語句)
  格式為∶RETURN; 在DATA步當前這個位置上停止執行語句并在繼續執行之前返回到一
  個預定的位置上。返回的位置取決于RETURN語句出現的地方。
  ①當LINK語句已被執行,RETURN語句讓SAS系統返回到LINK后面的語句并繼續執行。
  ②在HEADER=的語句組里,RETURN語句讓SAS系統返回到開始新頁之前執行的最后一個語
  句的后面語句并繼續執行。
  ③在DATA步的其他地方(如GOTO語句之后),RETURN語句讓SAS系統返回到DATA步的開頭。
  SAS首先輸出當前觀測到的一些新數據集,同時讓自動變量_N_的值增加1,并發布輸入行遵
  守尾隨@的準則。每個DATA步都有一個隱含的RETURN作為最后可執行的語句。

Ⅳ.用在DATA步的信息語句
  1.ARRAY語句(數組語句)
  (1)顯示下標數組語句
  格式為∶ARRAY 數組名 [{n}] [$] [數組元素的長度] [數組元素] [(初始值)]; 
  注意∶數組名不能與同一DATA步中的SAS變量同名。{n}表示數組元素的個數,是正整數
  或*號,括號可用{}、[]或()。$表示數組的元素是字符。如∶
  ARRAY rain{5} x1-x5; ARRAY ab(*) x y z; ARRAY c[3]; 
  ARRAY d(10) _TEMPORARY_;
  _TEMPORARY_表示創建臨時數組元素列表,其特點為∶
  ①它們沒有名字,引用時必須用數組名和下標,如∶d(5); ②不能出現在輸出的數據集
  上。 ③不能用特殊下標(*)來引用所有元素。④計算速度快,占用內存少。
  (2)隱含下標數組語句
  格式為∶ARRAY 數組名 [(下標變量)] [$] [數組元素的長度] [數組元素]; 如∶
  DATA one;               DATA two;
  INPUT id x1-x10 y1-y10;        INPUT id x1-x10 y1-y10;
  ARRAY big(i) x1-x10 y1-y10;      ARRAY big(i) x1-x10 y1-y10;
  i=11;                 DO OVER big;
  PUT big;                 IF big=. THEN big=0;
  CARDS;                 END; CARDS;
  (數據行)                (數據行)
  ;                   ;
  左邊程序中PUT語句輸出big的第11個元素的值;右邊程序把big中的所有缺失值改為0。
  2.INFORMAT語句(輸入格式語句)
  格式為∶INFORMAT 變量名 [輸入格式] [DEFAULT=規定臨時缺省的輸入格式]……;
  在DATA步,可用此語句來規定在INPUT語句中列出的變量的省略輸入格式。如∶
  DATA _null_;             CARDS;
  INFORMAT DEFAULT=3.1;        11 22 33 44 55
  INPUT x1-x5;            ;
  PUT x1-x5;             RUN;
  這個DATA步提交后在LOG窗口輸出的結果為∶1.1 2.2 3.3 4.4 5.5。
  3.FORMAT語句(格式語句)
  格式為∶FORMAT 變量名 [格式] [DEFAULT=規定臨時缺省的輸入格式]……;
  在DATA步使用FORMAT語句可永久地把格式同變量聯系起來,在PROC步用FORMAT語句僅僅
  在PROC步起作用。SAS系統將使用聯系的格式來輸出這些變量的值。如∶
  DATA _null_;         PROC FORMAT;        CARDS;
  FORMAT y 10.3 DEFAULT=8.2;  VALUE sexfmt 1='MALE'   Jane 2 Bill 1
  x=12.1; y=10.3;              2='FEMALE';  ……
  PUT x=;           DATA all;          ;
  PUT y=;            INPUT name $ sex @@;    RUN;
  RUN;              FORMAT sex sexfmt.;    
  (程序1)           (程序2第1部分)      (程序2第2部分)
  程序1的輸出結果為∶x=12.10 y=10.300;程序2中性別sex輸入時用1(男)、2(女),
  輸出時自動變成MALE(男)、FEMALE(女)。
  4.LENGHT語句(長度語句)
  格式為∶LENGHT [變量名][$]長度]……[DEFAULT=n];
  在DATA步用該語句規定在開始創建的每個數據集中SAS系統用來存貯變量值的字節數目。
  如∶LENGHT name $20; 設置字符變量name的長度為20。字符變量的長度在1到200之間;數
  值變量的長度在3到8之間。
  5.LABEL語句(標記語句)
  格式為∶LABEL 變量名='標記內容,包括空格最多40個字符'; 如∶
  LABEL compound='TYPE OF PRUG'; LABEL n='SAMPLE SIZE';
  6.ATTRIB語句(屬性語句)
  格式為∶ATTRIB 變量名 [FORMAT=格式] [INFORMAT=輸入格式] [LABEL='標記內容']?
  [LENGHT=[$]長度]……; 如∶
  ATTIB x LENGHT=$4 LABEL='TEST VARIABLE';
  ATTIB saleday INFORMAT=mmddyy. FORMAT=worddate.;
  7.語句標號(參見GOTO語句和LINK語句)
  8.DROP語句(刪除語句)
  格式為∶DROP 變量名; 
  在DATA步中使用DROP語句來規定不包含在這個SAS數據集或正被創建的數據集中的變量。
  當有多個數據集正被創建時,為了有選擇地刪掉變量, 在每個數據集的名字后面使用DROP=
  的數據集選擇項(參見DATA語句)。
  9.KEEP語句(保存語句)
  格式為∶KEEP 變量名; 與DROP語句用法相同,作用相反。
  10.RETAIN語句(保留語句)
  格式為∶RETAIN [元素……[初始值|(初始值][,]……)]……];
  元素可以是變量、變量列表或數組名,它們的值是用戶想保留的。如果沒有列出元素,
  SAS保留DATA步中所有變量值。
  用INPUT語句或賦值語句,再使用RETAIN語句時,僅僅在DATA步第1次重復執行之前,
  SAS置這些變量為缺失(或RETAIN語句中給出的初值); 以后,變量保持它們的值直到新的值
  成為有效(如通過賦值語句或INPUT語句的下一次執行)。 在RETAIN語句中命名累加的唯一目
  的是給郴等于0的其他初值(不用此語句變量的初值為0)。
  11.RENAME語句(換名語句)
  格式為∶RENAME 舊變量名=新變量名……;
  在DATA步中用此語句對正創建的數據集中的變量給出新名字。
  12.WINDOW語句(窗口語句)
  格式為∶WINDOW 窗口名 [選擇項] [域……] [GROUP=組[域……]]……;
  此語句可用來在顯示管理、交互行方式或非交互方式中創建用戶使用的窗口。這些窗口
  可用來顯示文字說明或接受輸入的數據。它們同樣有命令行和信息行,而且窗口名字也出現
  在窗口的左上角,在這些窗口內同樣可以使用窗口命令和功能鍵。窗口選擇項包括∶
  ①COLOR=顏色 用來指明窗口的背景顏色。有下列關鍵詞表明所選的顏色∶
  WHITE(白) BLACK(黑) GREEN(綠) MAGENTA(洋紅) RED(紅) YELLOW(黃) CYSAN(青蘭)?
  GRAY(灰) BLUE(藍) BROWN(棕) PINK(粉紅) ORANGE(桔黃)。
  ②ROWS=規定窗口的行數;③COLUMNS=規定窗口的列數;④IROW=指明所顯示窗口的初始
  行號;⑤ICOLUMN=指明所顯示窗口的初始列號;⑥KEYS=指明包含該窗口功能鍵定義的文件名。
  下面舉一個例子展示WINDOW語句和DISPLAY語句的結合使用方法。
  DATA abc;                     DISPLAY star;
  WINDOW star COLOR=YELLOW             OUTPUT;
  #5 @10 'Enter the number of the Programs'     x=.;
  #7 @10 'd2p7.PRG ------ 7'            STOP;
  #8 @10 'd2p8.PRG ------ 8'           DATA a; SET abc;
  #9 @10 'Number' @20 x PROTECT=NO         IF x=7 THEN %INCLUDE 'a:d2p7.prg';
  #10 @10 'Press Enter to continue';        RUN;
  (程序的第1部分)                 (程序的第2部分)
  此程序提交執行后,創建一個名為star的窗口,顯示第3~7行上單引號內的信息,光
  標停在number之后等待用戶輸入一個需要運行的程序編號。 若輸入數字7后回車,將A盤上
  的程序d2p7.prg調入SAS系統并運行此程序。若用戶希望將d2p7.prg調到PGM窗口等修改后再
  提交給SAS系統執行,需對倒數第2行進行如下修改∶
  IF x=7 THEN DM "INCLUDE 'a:d2p7.prg' ";
  Ⅴ.用在PROC步的語句
  1.PROC語句(過程語句) 格式為∶PROC 過程名 [選擇項]; 
  如∶PROC MEANS DATA=aa MAXDEC=3 MEAN;
  2.VAR語句(變量語句) 格式為∶VAR 變量名; 
  如∶VAR a b c; VAR x1-x10 y;
  3.MODEL語句(模型語句) 格式為∶MODEL 因變量=自變量/[選擇項];?
  如∶MODEL y=a b x1 x2;
  4.WEIGHT語句(權數語句) 格式為∶WEIGHT 變量名;?
  常用在這樣的一些分析中∶同每個觀測有聯系的方差不等,且權數變量的值與方差之倒
  數成比例。
  5.FREQ語句(頻數語句) 格式為∶FREQ 變量名; 
  變量為數值型的,它的值表示這個觀測出現的頻數。注意∶WEIGHT變量給出的是觀測的
  相應權數。
  6.ID語句 格式為∶ID 變量名; 
  其作用是識別觀測,相當于用1,2,3,……來給觀測編號。
  7.WHERE語句 格式為∶WHERE 表達式;?
  在SAS系統引入觀測到PROC步之前從一個SAS數據集中選擇符合特殊條件的觀測。如∶
  PROC PRINT DATA=nc; WHERE county IN ( 'Wake', 'Franklin', 'Dare' ); RUN;
  此過程步輸出關于Wake、Franklin和Dare縣的觀測。
  8.CLASS語句(分類語句)
  格式為∶CLASS 變量名; 如∶CLASS a b c;
  該語句被一些SAS過程用來識別分類變量,以便進行統計分析。
  9.BY語句
  格式為∶BY 變量名; 如∶BY a b c;
  當用戶希望分組處理數據集時,應該將SORT過程和BY語句結合起來定義數據集被分類的
  次序。如∶PROC SORT; BY a b c; RUN; PROC MEANS; BY a b c; RUN;
  若a、b、c分別有2、3、4個水平,且各水平組合下都有兩次以上重復試驗數據,則上面
  兩個過程步提交執行后,將把整個數據集拆成24個子集分別求各變量的均數、標準差等統計
  量的值。
  10.OUTPUT語句(輸出語句)
  格式為∶OUTPUT [OUT=SAS數據集名] [關鍵詞=與關鍵詞聯系的輸出變量名]……; 如∶
  PROC MEANS; VAR x; OUTPUT OUT=aaa MEAN=meanx STD=sx; RUN;
  這里,aaa為將要輸出的SAS數據集名,MEAN、STD為MEANS過程中允許寫的選擇項中的關鍵詞
  ,meanx、sx是希望在輸出結果中用這兩個變量分別表示變量x的均數宏準差。
  11.QUIT語句(退出語句)
  格式為∶QUIT; 
  該語句結束交互式運行SAS的過程(注∶在使用時,它與RUN語句的區別并不明顯)。
  12.FORMAT語句(格式語句)
  格式為∶FORMAT 變量名 [格式]……;
  用該語句把格式與PROC步的變量聯系起來,這些格式可以是SAS格式或用FORMAT過程定
  義的格式。如∶
  PROC FORMAT;            PROC PRINT DATA=all;
  VALUE sexfmt 1='MALE'       FORMAT sex sexfmt.;
  2='FEMALE';     RUN;
  (程序的第1部分)          (程序的第2部分)
  13. LABEL語句(標記語句)
  格式為∶LABEL 變量名='標記內容,包括空格最多40個字符'; 如∶
  PROC PLOT; PLOT x*y; LABEL x='response time' y='hour of day'; RUN;
  輸出的散布圖中水平軸和垂直軸使用變量的標記,而不使用變量名。
  14.ATTRIB語句(屬性語句)
  格式和用法參見“Ⅳ.用在DATA步的信息語句”中關于該語句的介紹。
  Ⅵ.全程語句(用在任何地方的SAS語句)
  1.COMMENT語句(注釋語句)
  ①格式為∶ * 信息的具體內容;
  信息的長度可任意,但信息中不能包含分號,最后的分號表示語句結束。 在一個SAS程
  序中可用任意多個注釋語句。
  ②格式為∶ /* 信息的具體內容 */
  這種注釋語句可出現在SAS語句里面空格能夠出現的任何地方,中間的信息可以包含分號。
  2.DM語句
  該語句允許用戶以SAS語句的方式提交在SAS顯示管理系統中可使用的任何有效的命令。
  ①命令本身不含單引號 格式為∶ DM '顯示管理命令;……'[窗口名]; 如∶
  DM 'CLEAR'; 其作用是清除窗口內的內容。DM 'LOG; COLOR SOURCE RED';其作用是
  取LOG為活動窗口,并改變所有源程序語句為紅色。該語句執行結束后,PGM窗口變成活動窗
  口。DM 'MENU' MENU; 其作用是進入SAS過程菜單系統,可通過填寫過程面板來提交給SAS系
  統執行。
  ②命令本身含單引號 格式為∶ DM " INCLUDE 'a:TTEST.PRG' "; 此語句執行后所產
  生的作用等價于在PGM窗口的命令行上使用INCLUDE 'a:TTEST.PRG'命令。
  3.X語句
  格式①為∶ X 'PC-DOS操作系統命令';
  用X語句在SAS會話中發布PC-DOS操作系統命令。例如,在SAS會話期間決定要建立一個
  名為week的新目錄,在這個目錄中存貯永久的數據集moday,用以下語句實現。
  X 'mkdir week'; LIBNAME SAVE 'week'; DATA SAVE.MODAY; (多個SAS語句)
  格式②為∶ X;
  使用沒有規定操作系統命令的X語句來建立操作系統子會話,此語句執行后進入PC-DOS
  操作系統,可執行操作系統命令,輸入EXIT退出PC-DOS操作系統。
  4.TITLE語句(標題語句)
  格式為∶ TITLE[n] ['標題的具體內容,最多132個字符'];
  n應該是一具體的數字,它必須緊跟在詞TITLE后面,用來規定標題所在的行數。一頁上
  最多可產生10個標題行。例如∶
  TITLE 'The first line'; TITLE3 'The third line'; 欲取消所有的標題行,語句為
  ∶ TITLE; 欲取消第3行及以后的所有標題行,語句為∶TITLE3;?
  5.FOOTNOTE語句(腳注語句)
  格式為∶ FOOTNOTE[n] ['腳注的具體內容']; 一頁上最多可產生10個腳注行。 其用法
  和取消的方法與TITLE語句類似,從略。
  6.RUN語句(運行語句)
  格式為∶ RUN [CANCEL];
  不加后面的選擇項時,通知SAS系統執行RUN語句之前的SAS步;當發現SAS程序有錯誤,
  不希望運行時,使用選擇項CANCEL。
  7.ENDSAS語句(結束語句)
  格式為∶ ENDSAS;
  該語句讓SAS作業或會話在當前DATA或PROC步的結尾終止。
  8.LIBNAME語句(庫名字語句)
  格式為∶ LIBNAME 庫標記 '路徑和目錄名';
  該語句用來定義程序存取的一些目錄,用于讀入或產生SAS文件(包括SAS數據集)。如∶
  LIBNAME store 'c:\inventry';         CARDS;
  DATA store.mar;                (數據行)
  INPUT day mmddyy8. mean groc dairy;     ;
  (程序的第1部分)               (程序的第2部分)
  此例產生一個永久的SAS數據集store.mar,其第1水平名字store是存貯這個永久文件
  的庫標記,LIBNAME語句規定了庫標記store與C盤上目錄inventry之間的聯系。當這些語句
  執行后,產生的永久數據集mar.ssd被自動存貯在C盤的目錄inventry上。
  9.FILENAME語句(文件名語句)
  格式為∶ FILENAME 文件標記 [設備類型] ['規定外部文件路徑、目錄和文件名'];
  其中設備類型有兩種,即PRINTER(打印機)和TERMINAL(終端屏幕)。
  該語句把SAS的文件標記(一個文嘉考名字)與一個外部文件的全名字(目錄加上文件名)
  聯系起來。于是,這個文件標記在存取外部文件的SAS程序語句里(INFILE,FILE和%INCLUDE)
  被用來作為縮寫的標記。如∶
  FILENAME food 'shopping.dat';     FILENAME food 'shopping.dat';
  DATA marker;              LIBNAME save 'allveg';
  INFILE food;             DATA save.marker; INFILE food;
  INPUT day mmddyy8. meat groc dairy;  INPUT day mmddyy8. meat groc dairy;
  RUN;                  RUN;
  (程序1)                (程序2)
  程序1從當前目錄下用文件標記food識別的文件中讀數據行, 并創建一個臨時數據集
  marker;程序2增加了LIBNAME語句,創建一個永久的SAS數據集,它存貯在用save作為庫標
  記的目錄下。
  FILENAME語句與LIBNAME語句的區別在于∶前者對一個外部文件定義文件標記,以便在
  FILE,INFILE或%INCLUDE語句中使用;而后者在用戶的程序中用來讀入或產生永久SAS文件(
  如SAS數據集)時定義一個庫標記。
  10.%INCLUDE語句
  格式為∶ %INCLUDE 文件標記|'文件名'[/SOURCE2];
  其中選擇項SOURCE2讓SAS記錄(即LOG窗口)來顯示所引入的程序的源程序語句。
  該語句的作用相當于在PGM窗口的命令行上使用INCLUDE命令從外部文件中調指定文件進
  入PGM窗口,并按F10鍵提交給SAS系統立即執行。
  11.OPTIONS語句(設置SAS系統選擇項語句)
  格式為∶ OPTIONS 選擇項的具體內容;
  該語句臨時改變SAS軟件在安裝時已設置的SAS系統選擇項中的一項或幾項。SAS系統的
  全部選擇項可通過PGM窗口的命令行上使用HELP OPTIONS命令調出OPTIONS窗口來了解或修改。
  常用于OPTIONS語句中的選擇項有∶LS=n(規定輸出行的寬度,n在64~132之間)、PS=n(規定
  輸出內容在每頁上被打印的行數,n在20~500之間),如∶OPTIONS LS=70 PS=30;

  5.4 SAS過程名及功能簡介
  Ⅰ.SAS/BASE模塊中的過程
  1.APPEND將一個SAS數據集中的觀測子到另一個SAS數據集之后。
  2.CALENDAR顯示按日歷格式形成的SAS數據集中的數據。
  3.CATALOG管理SAS目錄中的項目,如顯示一個目錄的內容等。
  4.CHART產生垂直和水平條圖、塊圖、圓圖和星圖。
  5.CIMPORT把在另一個主機操作系統上由PROC CPORT創建的一個傳輸順序文件按SAS目
  錄的要求轉換成它的原始形式。
  6.COMPARE比較兩個SAS數據集中的變量的值, 并報告發現的差別。
  7.CONTENTS從一個SAS庫中打印一個或多個文件的內容的描述信息。
  8.COPY拷貝一個完整的SAS庫或選擇庫中的成員。
  9.CORR計算變量之間的相關系數, 包括皮爾遜的積矩和加權積矩相關。
  10.CPORT將一個SAS庫,特別是SAS數據集或SAS目錄轉換成一個順序文件格式,此格式能
  被傳送到第6版系統上去。
  11.DATASETS對一個SAS庫進行列表、拷貝、更名、子和刪除SAS文件(數據集和目錄)。
  12. DBF使SAS數據集與dBASEⅡ、dBASEⅢ文件互相轉換。
  13. DIF使SAS數據集與數據交換格式(DIF)文件互相轉換。
  14. DOWNLOAD實現微機與主機間的連接,并使信息從主機向微機傳遞。
  15. FORMAT為字符型或數值袖量定義你自己的格式。
  16. FORMS為信封、郵件等打印標簽。
  17. FREQ產生1~n維的頻數表和交叉表。對于2維表,進行χ2檢驗等。
  18. MEANS為數值袖量產生簡單的描述性統計量。
  19. PLOT繪制兩個連續變量之間的散布圖、線圖等。
  20. PRINT打印SAS數據集中的觀測。
  21. PRINTTO為SAS過程的輸出定義一個目標, 也可改變SAS LOG的目標。
  22. RANK為一個SAS數據集中的一個或多個數值袖量計算秩。
  23. SORT按照一個或多個變量整理SAS數據集中的觀測。
  24. STANDARD按給定的均數宏準差對SAS數據集中的一些或全部變量進行標準化,并產
  生一個包含標準化值的新SAS數據集。
  25. SUMMARY對SAS數據集中的數值變量計算描述性統計量,并把結果輸出到一個新SAS數
  據集中去。
  26. TABULATE從分類變量、分析變量和統計量關鍵詞的組合構造描述性統計量的表。
  27. TIMEPLOT繪制一個或多個變量隨時間變化的圖。
  28. TRANSPOSE使SAS數據集中的觀測與變量互相轉換。
  29. UNIVARIATE對數值變量產生簡單的描述性統計量(包括分位數)。
  30. UPLOAD實現微機與主機間的連接,并使信息從微機向主機傳遞。
  Ⅱ.SAS/STAT模塊中的過程
  1. ACECLUS對欲進行樣品聚類分析的資料進行預處理,使之更好地滿足聚類分析的條件。
  2. ANOVA對來自各種試驗設計的平衡資料進行方差分析。
  3. CALIS用協方差結構分析估計線性結構模型的參數,并進行檢驗。
  4. CANCORR實現典型相關分析、偏典型相關分析和典型冗余分析。
  5. CANDISC實現典型判別分析。
  6. CATMOD利用模型對分類資料進行分析。
  7. CLUSTER用11種方法對SAS數據集中的觀測進行系統聚類分析。
  8. CORRESP實現簡單的和多重的對應分析。
  9. DISCRIM對定量指標進行判別分析,并給出判別函數。
  10. FACTOR對資料進行幾種類型的公因子分析和主成分分析。
  11. FASTCLUS對很大的數據集進行聚類分析,并能較好地把全部觀測分為兩類或三類。
  12. FREQ參見“SAS/BASE模塊中的過程”第17個過程。
  13. GLM用最小平方法擬合一般線性模型,可實現回歸分析、方差分析、協方差分析、多
  元協方差分析和偏相關分析。
  14. LIFEREG擬合失效時間資料的參數模型。
  15. LIFETEST對生存資料進行非參數統計分析。
  16. LOGISTIC用最大似然法對二項或有序反應資料擬合線性logistic回歸模型。
  17. NESTED對來自系統分組設計的資料進行隨機效應的方差分析和協方差分析。
  18. NLIN對非線性模型的參數進行積最小平或加權最小平估計。
  19. NPAR1WAY對來自單因素設計的定量資料進行非參數統計分析和對秩進行方差分析。
  20. ORTHOREG對病態資料進行回歸分析。
  21. PHREG依據COX比例風險模型對生存資料進行回歸分析。
  22. PLAN對嵌套和交叉試驗構造設計方案,并使方案隨機化。
  23. PRINCOMP對資料進行主成分分析。
  24. PRINQUAL用替換最小平方法使轉換的變量的協方差或相關矩陣的特性最優, 從而獲
  得變量的線性或非線性轉換。
  25. PROBIT對生物檢定量反應資料或其他離散事件資料,計算回歸參數和自然反應率的
  最大似然估計量。
  26. REG利用最小平方法擬合線性回歸模型,可通過各種模型選擇確定自變量的最優子集。
  27. RSREG擬合一個完全的二次反應曲面的參數,并分析所擬合的曲面以便確定最優反應
  的因子水平。
  28. SCORE使兩個SAS數據集中的數據相乘獲得某線性組合變量(如主成分、公因子)的得
  分值。
  29. STEPDISC對定量資料進行逐步判別分析,以便實現變量篩選。
  30. TRANSREG用替換最小平方法擬合資料獲得線性回歸,從而得到變量的線性和非線性
  轉換。
  31. TREE將聚類分析的結果用樹狀圖的形式打印出來。
  32. TTEST對成組設計資料進行方差齊性檢驗、一般t檢驗和t'檢驗。
  33. VARCLUS對定量資料進行變量聚類分析。
  34. VARCOMP計算一般線性模型中方差分量的估計量。

  5.5 SAS命令簡介
  SAS命令很多,這里僅給出使用SAS必須掌握的幾組重要的命令,命令后中括號里的內容為
  可選項,使用時中括號不應寫出。
  1. 顯示管理全程命令(可在任一窗口的命令行上使用,回車后生效)
  (1)窗口管理命令(可用HELP 31 2命令顯示)
  BYE(或ENDSAS) 徹底退出SAS DMS,回到SAS子目錄狀態;
  END      保留特定窗口內修改過的內容并退出該窗口;
  CANCEL     取消特定窗口內修改過的內容并退出該窗口;
  X       保留窗口內信息,臨時退出SAS DMS,回到DOS狀態,可執行各種DOS命令;
  EXIT      在使用X命令后的DOS狀態下,快速返回SAS DMS。
  (2)翻卷命令(可用HELP 31 4命令顯示)
  TOP(到頂)  BOTTOM(或BOT)(到底)  RIGHT MAX(右移最大量)
  N (使從上到下的第N行內容成為命令行下的第1行)
  (3)標記、截取和連接命令(可用HELP 31 6命令顯示)
  ①標記命令
  MARK(標記若干行);        MARK CHAR(標記字符串);
  MARK BLOCK(標記一矩形區域);   UNMARK(取消標記)。
  前3個標記命令的操作方法:先在命令行上鍵入命令,再把光標移至欲標記內容之首,按回
  車鍵;再在欲標記內容之尾,重復操作1次。若利用相應的功能鍵,則可分別將光標移至欲標記
  內容之首、尾各按1次功能鍵即可。UNMARK命令只需執行一次即可。
  ②截取命令
  STORE [BUFFER=文件名] ;     CUT [BUFFER=文件名]。
  把標記后的內容直接存入緩沖區或用給定的文件名存入緩沖區。如果省略中括號里的內
  容,則后一次存入的內容就替代了前一次存入的內容。
  STORE與CUT的區別是:用STORE時,標記后的內容仍保留在原處;用CUT時,標記后的內容從
  原處被切除,CUT不能在OUTPUT窗口上使用。
  ③連接命令
  PASTE [BUFFER=文件名]
  把用STORE或CUT命令存入緩沖區的內容調到光標所在的窗口里來。操作方法:先在命令
  行上輸入命令,光標下移到有行號的編輯區域內,再按回車鍵。
  2. 文本編輯命令之一(可用HELP 31 6命令顯示)
  本組命令在命令行上使用,回車后生效,其中最常用的命令有:
  AUTOWRAP ON      使一行中超過136個字符部分自動移到下行;否則,將被刪除;
  CLEAR         清屏;?
  FILE 'PRN:'      把窗口內的文件送到打印機上去;
  FILE '盤名:文件名'   文件存入指定的盤;
  INCLUDE '盤名:文件名' 把指定的盤上某文件調入窗口。
  3. 文本編輯命令之二(可用HELP 31 6 34和HELP 31 6 35命令顯示)
  本組命令只在PGM窗口內行號上使用,其中一部分可單獨使用, 另一部分需與操作定位命
  令配合起來使用。如果一個完整的命令需通過2行或3行上發送命令才能完成, 則中間過程都
  要靠移動光標鍵來實現,最后按一次回車鍵使之生效。
  (1)單行命令
  ①只在一行上使用的一般命令(回車后生效)
  CL   把當前行上的字符由大寫改成小寫;
  CU   把當前行上的字符由小寫改成大寫;
  D[N]  刪除自當前行起的N行,D或D1都表示只刪除當前行,其他命令中N的用法與此相似;
  I[N]  在當前行之后插入N個空行;
  IB[N] 在當前行之前插入N個空行;
  JC[N] 以第N列為中點, 使當前行內容置中;
  JL[N] 自左至右的第N列為當前行的第1個字符的位置;
  JR[N] 自左至右的第N列為當前行的最后1個字符的位置;
  R[N]  使當前行的內容在該行之后復制N行;
  >[N]  使當前行內容右移N個字符;
  <[N]  使當前行內容左移N個字符;
  TF[N] 自當前行起, 使相鄰的所有行中的每一行上保留N個字符( 含字符間的空格);
  TS[N] 將當前行分裂成兩行,并使這兩行之間留出N個空行。操作方法是: 先鍵入命令,
  光標右移至欲分裂處,再按回車鍵。
  ②只在一行上使用的特殊命令(回車后生效)
  COLS  在當前行上顯示1個水平標尺;
  MASK  標記當前行的內容,在所需之處可用I、IB命令反復獲得該行的內容;
  TA[N] 在當前行上設置跳格標尺,其標志是每隔N個字符處有一個T字符;
  D   在鍵入上述3個特殊命令的行號上,鍵入D命令,則可取消特殊命令。
  (2)兩行上使用的塊命令(操作方法:第2次鍵入命令后再按回車鍵)
  功能:使鍵入命令的兩行及其中間的所有行(簡稱為“文件塊”)上的內容作同樣的操作。
  CCL  使文件塊的字符由大寫改成小寫;
  CCU  使文件塊的字符由小寫改成大寫;
  DD   刪除文件塊的全部內容;
  JJC[N] 以第N列為中點, 使文件塊的內容置中;
  JJL[N] 自左至右的第N列為文件塊的第1個字符的位置;
  JJR[N] 自左至右的第N列為文件塊的最后1個字符的位置;
  RR[N] 使文件塊的內容在該行之后復制N次;
  >>[N] 使文件塊的內容右移N個字符;
  <<[N] 使文件塊的內容左移N個字符。
  (3)操作定位命令
  A   即AFTER之意,操作的結果將出現在鍵入A的那一行之后;
  B   即BEFORE之意,操作的結果將出現在鍵入B的那一行之前;
  O   即OVERLAP之意,操作的結果將重疊于鍵入O的那一行之上。
  (4)與操作定位命令配合使用的命令(最后一步按回車鍵)
  ①只在一行上使用的單行命令
  C[N]  把自當前行起的N行內容拷貝到由A、B命令指定的位置上去;
  M[N]  把自當前行起的N行內容移到由操作定位命令指定的位置上去。
  ②在兩行上使用的塊命令
  CC[N] 把文件塊的內容拷貝到由A、B命令指定的位置上去;
  MM[N] 把文件塊的內容移到由操作定位命令指定的位置上去。

  5.6 SAS中宏知識簡介
  1. 宏變量
  宏變量(也稱符號變量)屬于SAS宏語言的范疇,和數據步中的變量的概念是不一樣的。除
  了數據行外,你可以在SAS程序的任何地方定義和使用宏變量。數據步變量是和數據集相聯系
  的,而宏變量是獨立于數據集的。數據集變量的值取決于正在處理的觀測,而一個宏變量的值
  總是保郴變,直到被明確改變。定義一個宏變量的最簡單的辦法是使用宏語句%LET, 如:
  %let dsn=Newdata; DSN就是宏變量的名字,Newdata是它的值。宏變量命名遵從一般的SAS命
  名規則,宏變量的值是一個字符串。
  要引用宏變量的值,在宏變量的前面放“&”,如title "Display of Data Set &dsn";
  宏處理器用DSN的值去代替&dsn,結果得到TITLE "Display of Data Set Newdata";
  值得注意的∶是這里的標題必須用雙引號括起來,而不能用單引號,因為宏處理器只對雙
  引號中引用的宏變量進行這種處理,而把單引號中的所有字符都看作是標題的內容。
  在一個SAS程序中,你可以根據需要引用宏變量任意次, 在你改變它之前它的值一直保持
  不變。下面的程序就引用了DSN兩次。
  DATA temp; SET &dsn; IF age>=20;
  PROC PRINT; TITLE "Subset of Data Set &dsn"; RUN;
  每次&dsn一出現,宏處理器就用Newdata代替它,SAS實際執行的語句是∶
  DATA TEMP; SET NEWDATA; IF AGE>=20;
  PROC PRINT;  TITLE "Subset of Data Set Newdata";  RUN;
  你也可以創建一個包含SAS語句的宏變量,如:
  %LET plot=%str(      這種情況下,宏變量的值都作為函數%STR的實參, 于是分
  PROC PLOT;       號成為宏變量值的一部分,而不會被當做%LET語句的結束。
  PLOT income*age;     要改變宏變量的值,只需用%LET語句重定義, 宏變量也可
  RUN;          以賦空值,如:
  )           %LET dsn=Nextdata; %LET plot=;
  第1個語句對DSN重新賦值Nextdata,第2個語句對PLOT賦空值。宏變量也可以嵌套引用:
  %LET dsn=Olddata;        DATA temp;
  %LET yvar=Income;         SET &dsn;
  %LET xvar=Age;           IF age>=20;
  %LET plot=%str(         &plot
  PROC PLOT;            PROC PRINT;
  PLOT &yvar*&xvar;         TITLE "Subset of Data Set &dsn";
  RUN;               RUN;
  )
  (程序的第1部分)         (程序的第2部分)
  SAS實際執行的是如下的語句:
  DATA TEMP; SET OLDDATA; IF AGE>=20;
  PROC PLOT; PLOT YVAR*XVAR; RUN;
  PORC PRINT; TITLE "Subset of Data Set Olddata"; RUN;
  2. 宏
  宏就是存貯的一個文本,最簡單的宏工作起來很像一個宏變量,但是復雜的宏可以做許多
  宏變量無法完成的事。下面是一個最簡單的宏定義。
  %MACRO dsn;  Newdata %MEND dsn;
  宏定義總是由%MACRO語句開始, 而且必須包含一個宏名。宏名遵從一般的SAS命名規則,
  這里的宏名叫DSN。Newdata是宏的內容, %MEND作為宏定義的結束語句;這里的 %MEND語句為
  了清晰還重復了宏名。要調用一個宏,只需放一個百分號(%)在宏名的前面,如:
  TITLE "Display of Data Set %dsn";
  宏處理器執行宏展開,用宏內容去代替%dsn,TITLE語句成為:
  TITLE "Display of Data Set Newdata"; 同樣,標題必須用雙引號括起來。
  一個SAS程序可以包含多個宏,一個宏也可以被多次調用,要改變一個象DSN這樣簡單的宏
  的內容,只需重新定義宏,對簡單的文本代換,用宏變量比定義一個宏效率要高,但是當任務比
  較復雜的時侯,宏救宏變量要優越得多了。下面的程序創建一個包含整段SAS程序的宏。
  %MACRO plot; PROC PLOT; PLOT income*age; RUN; %MEND plot;
  以后調用宏如下:          SAS實際執行的語句是:
  DATA temp;               DATA TEMP;
  SET olddata;              SET OLDDATA;
  IF age>=20;              IF AGE>=20;
  %plot                PROC PLOT;
  PROC PRINT;               PLOT INCOME*AGE;
  RUN;                  RUN;
  PROC PRINT;  RUN;
  假設在PROC PLOT中的繪圖變量可以改變,你就可以用宏變量引用去替換PLOT語句中的變
  量名,然后在調用宏之前用%LET語句給宏變量賦值。
  %MACRO plot;             SAS 實際執行的是如下的語句:
  PROC PLOT;            DATA TEMP;
  PLOT &yvar*&xvar;           SET OLDDATA;
  RUN;                  IF AGE>=20;
  %MEND plot;             PROC PLOT;
  DATA temp;               PLOT INCOME*AGE;
  SET olddata;           RUN;
  IF age>=20;            PROC PLOT;
  %LET yvar=income;           PLOT INCOME*YRS_EDUC;
  %LET xvar=age;            RUN;
  %plot                PROC PRINT;
  %LET xvar=yrs_educ;         RUN;
  %plot
  PROC RRINT;
  RUN;
  宏變量和宏結合起來使用,為靈活設計提供了極大的方便。當程序較長的時侯,就象上面
  的程序一樣,總是使用%LET語句就顯得不那么方便了,這時可以使用宏參數, 即定義宏變量作
  為%MACRO語句的一部分。
  %MACRO plot(yvar,xvar); PROC PLOT; PLOT &yvar*&xvar; RUN; %MEND plot;
  %MACRO語句的括號中定義的宏變量就是宏參數,當調用宏的時侯,需將值傳遞給宏參數,?
  如: %plot(income,age)
  宏處理器把第1個值和第1個宏變量匹配,第2個值和第2個宏變量匹配……因此,這些參數
  叫做位置參數,于是產生下面語句:
  PROC PLOT; PLOT INCOME*AGE; RUN;
  假設你經常創建數據集TEMP和繪制PLOT圖,你可以將數據步做成一個宏,而過程步做成另
  一個宏,然后在第3個宏里調用它們。注意最好加上注釋說明你要做什么。
  %MACRO create;            %MACRO analyze(yvar,xvar);      
  Data temp;              %*Create the Data Set;       
  SET olddata; IF age>=20;      %create              ?
  %MEND create;              %*Plot the Variable Selected;   ?
  %MACRO plot;              %plot               ?
  PROC plot;             %MEND analyze;            
  PLOT &yvar*&xvar; RUN;      
  %MEND plot;             ?
  (程序的第1部分)           (程序的第2部分)
  在宏ANALYZE中,由“%*”開始的語句是宏注釋語句, 它們用于對宏內做的事情作注解。
  當宏較長的時侯,是很必要的。當你定義完這些宏后,就可以通過調用宏來運行程序。
  %analyze(income,age)
  如果你想改變CREATE,重新定義它,則:
  %MACRO create;
  DATA temp2; SET olddata(obs=100); IF age>=20;
  %MEND create;
  然后調用ANALYZE,方法是: %analyze(income,age)
  當然,你也可以把整個程序段都放入ANALYZE,而不去調用其他宏,但是,定義CREATE和PLOT
  的優點是你可以在調用ANALYZE之前分別重新定義和調試它們,在規模較大的宏中, 模塊結構
  是很重要的。
  當你使用宏ANALYZE時,假設有時你需要執行宏CREATE中的DATA步,而有時又可直接從PROC
  PLOT開始,重新定義ANALYZE,使用%IF-%THEN語句。
  %MACRO analyze(getdata,yvar,xvar);
  %IF &getdata=yes %THEN %create;  %ELSE %plot;
  %MEND analyze;
  如下調用ANALYZE,方法為:
  %analyze(yes,income,age) %analyze(no,income,yrs_educ)  產生:
  DATA TEMP;  SET OLDDATA; IF AGE>=20; PROC PLOT; PLOT INCOME*AGE; RUN;
  PROC PLOT;  PLOT INCOME*YRS_EDUC; RUN;
  如果在%THEN從句中有多個語句, 使用%DO-%END組,如:?
  %MACRO analyze(getdata,yvar,xvar);?
  TITLE; %IF &getdata=yes %THEN %DO;  ?
  %create  TITLE3 "Data Set Created for This Plot"; %END;
  %plot
  %MEND analyze;
  如果我們調用ANALYZE, 方法如下: %analyze(YES,income,age) 。
  那么產生的語句是: “PROC PLOT; PLOT INCOME*AGE; RUN; ”。
  宏處理器并沒有調用宏CREATE去創建一個數據集, 因為宏處理器在把宏展開時并不把小
  寫字母轉換為大寫。于是%IF語句作的比較是YES=yes,當然為假,事與愿違。為了在調用時不
  管大小寫都正確,應該修改ANALYZE如下:
  %MACRO analyze(getdata,yvar,xvar);
  %IF %UPCASE(&getdata)=YES %THEN %create; %ELSE %plot;
  %MEND analyze;
  其中宏函數%UPCASE把小寫轉換為大寫。
  假設你想創建一系列名字用于SAS語句, 如DATA或VAR語句,可以借助宏來實現。
  %MACRO names(name,number)
  %DO n=1 %TO &number; &name&n  %END;
  %MEND names;
  宏NAMES把參數NAME的值和宏變量的值連接起來形成一系列名字,參數NUMBER的值是宏變
  量N的終止值。于是在DATA步中調用NAMES,方法如下:
  DATA %names(dsn,5); 產生語句: DATA DSN1 DSN2 DSN3 DSN4 DSN5;
  3. 數據步中的宏變量
  假設你想把一個數據集的觀測數放進一個FOOTNOTE語句中,首先定義一個宏,如:
  %MACRO create;
  DATA temp;
  SET olddata END=final; IF age>=20 THEN DO; n+1; OUTPUT; END;
  IF final THEN CALL SYMPUT('number',n); RUN;
  %MEND create;
  以后一旦調用CREATE,則CALL SYMPUT語句將計數變量N的值傳遞給宏變量NUMBER,NUMBER
  可以是以前創建的宏變量,也可以是在當前的DATA步創建的。
  這個宏變量以后可以直接引用, 也可以在DATA步用SYMGET函數引用。從而實匣同的數
  據步中的值傳遞,如:
  x=SYMGET('number'); 數據步變量X的值就是數據集TEMP中的觀測個數。
  也可以在DATA步用SYMGET函數引用。從而實匣同的數
  據步中的值傳遞,如:
  x=SYMGET('number'); 數據步變量X的值就是數據集TEMP中的觀測個數。

?


總結

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

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