SAS 入门(二)实战篇
SAS入門(二)
- 循環語句
- IF語句
- 宏
- 宏變量
- 全局宏變量
- 局部宏變量
- 定義宏程序
- 數據集操作
- 數據導入
- 子集數據
本篇基于上一篇的理論學習,即 SAS入門(一)進行實戰,旨在記錄實操中的語句及練習中出現的bug、解決方案。
循環語句
- DO Index 語法
DO indexvariable= initialvalue to finalvalue ;
. . . SAS statements . . . ;
END;
- 例子
DATA ex1;
SUM=0;
DO VAR=1 to 5;
SUM=SUM+VAR;
END;
PROC PRINT DATA=ex1;
RUN;
- DO While 語法
DO WHILE (variable condition);
. . . SAS statements . . . ;
END;
- 例子
data ex2;
sum=0;
var=1;
do while(var<6);
sum = sum+var;
var=var+1;
end;
proc print;
run;
- DO Until 語法
DO UNTIl (variable condition);
. . . SAS statements . . . ;
END;
- 例子
data ex3;
sum=0;
var=1;
do until(var>5);
sum=sum+var;
var+1;
end;
proc print;
run;
**注:**上述語句塊結束后均要加end
IF語句
- if語句 語法
IF (condition );
if語句篩選符合條件的數據時,首先要通過set引用已存在的數據集,此后創建新的數據集并通過if 篩選符合條件的數據,最后通過proc print輸出。
- 例子
DATA dat;
INPUT EMPID ENAME $ SALARY DEPT $ DOJ DATE9.;
LABEL ID = ‘Employee ID’;
FORMAT DOJ DATE9.;
DATALINES;
1 Rick 623.3 IT 02APR2001
2 Dan 515.2 OPS 11JUL2012
3 Mike 611.5 IT 21OCT2000
4 Ryan 729.1 HR 30JUL2012
5 Gary 843.2 FIN 06AUG2000
6 Tusar 578.6 IT 01MAR2009
7 Pranab 632.8 OPS 16AUG1998
8 Rasmi 722.5 FIN 13SEP2014
;
Data EMPDAT1;
Set dat;
IF SALARY > 650; /* if后面加不加括號均可運行 */
PROC PRINT DATA=EMPDAT1;
run;
- if - then - else - if 語句 語法
IF (condition1) THEN result1;
ELSE IF (condition2) THEN result2;
ELSE IF (condition3) THEN result3;
- 例子
data dat2;
set dat;
if salary<600 then range=‘low’;
else if 600<= salary <700 then range=‘medium’;
else if salary>700 then range=‘high’ ;
proc print;
run;
- if - then dalete 語句 語法
刪除符合條件的列
IF (condition ) THEN DELETE;
- 例子
data dat1;
set dat;
if salary>700 then delete;
proc print;
run;
宏
宏變量
全局宏變量
在SAS環境中的任何程序中均可調用,通過&調用
proc print data=dat;
where dept=‘IT’ ;
title “info of &SYSDAY &SYSDATE” ;
/* 必須用雙引號,title后沒有=*/
run;
局部宏變量
自定義局部宏變量
- 語法
% LET (Macro Variable Name) = Value;
/* 通過 %let 定義*/
- 例子
%let dept_=‘IT’;
proc print data=dat;
where dept = &dept_;
title “info of &sysday &sysdate” ;
run;
定義宏程序
- 語法
/* Creating a Macro program. /
%MACRO (Param1, Param2,….Paramn);
Macro Statements;
%MEND;
/ Calling a Macro program. */
%MacroName (Value1, Value2,……Valuen);
- 例子
%macro result(name_) ;
proc print data=dat;
where dept="&name_";
title “info of &sysday”;
run;
%mend;
%result(IT);
注:
1、where語句中的變量名引用必須是雙引號;
2、引用宏時,括號內的參數區分大小寫(一定要與實際數值相匹配);
數據集操作
數據導入
1、通過import導入.xls數據集時報錯:
ERROR: Database error. Examine fields and/or messages below.
Unexpected OLE2 file manipulation error (-2147287038).
問題溯源:
找到一篇文章,提示xls文件導入報錯是由于版本不適配
2、通過data步自主創建
版本問題不好解決且訓練集比較小的情況下,決定通過data步創建,代碼格式:
注:此處創建永久的數據集
Libname ex ‘c:\SAS\dataset’ ; /* 創建永久數據庫*/
Data ex.GDP;
Input year gdp1 gdp2 gdp3 @@; /* @@表示 連續輸入*/
cards;
1978 28.18857 47.87643 23.935
1979 31.26565 47.10062 21.63373
1980 30.17392 48.2222 21.60387
1981 31.88069 46.11002 22.00929
1982 33.38876 44.76504 21.84621
1983 33.17966 44.37958 22.44076
1984 32.13198 43.08654 24.78148
1985 28.44262 42.88581 28.67157
1986 27.15007 43.72381 29.13612
1987 26.81105 43.55061 29.63835
1988 25.69572 43.78965 30.51462
1989 25.10501 42.83112 32.06388
1990 27.11618 41.34065 31.5531
1991 24.52632 41.78868 33.68501
1992 21.78991 43.44464 34.75545
1993 19.70843 46.56837 33.7232
1994 19.76125 46.56929 33.56947
;
run;
之前未加@@時發生報錯;
注:@與@@區別
- @ 表示執行下一個操作時,指針移到下一個記錄。
如:
cards;
1 2
3 4 ;
- @@表示執行下一個操作,指針保持在當前記錄。
如:
cards;
1 2 3 4;
3、數據打印
proc步的print函數
proc print data=ex.gdp;
run;
輸出結果如下:
4、input定義變量
SAS語法參考鏈接
| 字符型 | INPUT FNAME $ LNAME $ ADDRESS $; | 在變量名后添加符號 $ |
| 日期型 | INPUT VAR1 DATE11. VAR2 MMDDYY10. ; | 在變量名稱末尾添加帶有空格的日期格式 |
| 數值型 | Varname Formatnamew.d | VARNAME是變量的名稱;FORMATNAME是應用于變量的數字格式的名稱;w是允許為變量存儲的數據列的最大數量(包括小數點后的數字和小數點本身);d是小數右邊的位數; |
注:
1、 input @1 COL1 4.2 @7 COL2 3.1; /* @x 表示從第x位開始讀;n.p表示共計n位,小數點后有p位 */
2、日期格式
| 03/11/2014 | 10 | mmddyy10. |
| 03/11/14 | 8 | mmddyy8. |
| December 11, 2012 | 20 | worddate20. |
| 14mar2011 | 9 | date9. |
| 14-mar-2011 | 11 | date11. |
| 14-mar-2011 | 15 | anydtdte15. |
- 例子
DATA TEMP;
/* 定義輸入時的數據格式*/
INPUT @1 DOJ1 mmddyy10. @12 DOJ2 mmddyy10. ;
/* 定義輸出的數據格式,若不定義則默認輸出為數值*/
format DOJ1 date11. DOJ2 worddate20. ;
DATALINES;
01/12/2012 02/11/1998
;
PROC PRINT DATA=TEMP;
RUN;
子集數據
- 通過drop去掉一些指標
- 通過keep保留一些指標
KEEP var1 var2 … ;
DROP var1 var2 … ;
例子:
DATALINES;
1 Rick 623.3 IT
2 Dan 515.2 OPS
3 Mike 611.5 IT
4 Ryan 729.1 HR
5 Gary 843.25 FIN
6 Tusar 578.6 IT
7 Pranab 632.8 OPS
8 Rasmi 722.5 FIN
;
/* 第一種情況*/
RUN;
DATA OnlyDept;
SET Employee;
KEEP ename DEPT;
RUN;
PROC PRINT DATA=OnlyDept;
RUN;
/* 第二種情況*/
DATA OnlyDept;
SET Employee;
DROP empid salary;
RUN;
PROC PRINT DATA=OnlyDept;
RUN;
- IF語句選定指標
IF Var Condition THEN DELETE ;
例子
DATA OnlyDept;
SET Employee;
IF salary < 700 THEN DELETE;
RUN;
PROC PRINT DATA=OnlyDept;
RUN;
總結
以上是生活随笔為你收集整理的SAS 入门(二)实战篇的全部內容,希望文章能夠幫你解決所遇到的問題。