
一.使用PRINT過程步
1.PRINT過程步的基本使用
前面我們已經(jīng)提到過利用PRINT過程步檢查我們建立的SAS數(shù)據(jù)集的內(nèi)容,實際上就是用PRINT過程步顯示SAS數(shù)據(jù)集的內(nèi)容。PRINT過程步由一個PROC PRINT語句開始,其一般形式為:
PROC PRINT options;
選項包括DATA=選項,它指定你使用的數(shù)據(jù)集,如果不使用該選項的話,系統(tǒng)使用最近用到的數(shù)據(jù)集。另外,在用PRINT過程步顯示SAS數(shù)據(jù)集的內(nèi)容之前,或者說,在一個程序的開頭,往往需要用LIBNAME語句指定SAS數(shù)據(jù)庫。例如:
libname clinic'c:\clinic';
proc printdata=clinic.admit;
run;
提交這段程序以后,SAS系統(tǒng)就會在OUTPUT窗口中顯示該數(shù)據(jù)集的內(nèi)容,我們把它稱為報表(report)。例如:
ID |
NAME |
SEX |
AGE |
HEIGHT |
WEIGHT |
FEE |
2458 |
Murray, W |
M |
27 |
72 |
168 |
85.20 |
2462 |
Almers, C |
F |
34 |
66 |
152 |
124.80 |
2501 |
Bonaventure, T |
F |
31 |
61 |
123 |
149.75 |
2.控制產(chǎn)生的報表
在缺省情況下,PRINT過程步產(chǎn)生的報表會顯示:
A.?dāng)?shù)據(jù)集中所有的觀測和變量
B.在最左邊一列顯示觀測號
C.變量根據(jù)它們在數(shù)據(jù)集中的順序排列
為了得到你想要的報表,你可以對產(chǎn)生報表的過程進(jìn)行控制,你可以:
A.利用系統(tǒng)選項控制報表的樣式
B.選擇顯示變量和觀測
C.對數(shù)據(jù)進(jìn)行排序
D.加題注和尾注
E.顯示描述性的變量標(biāo)記
F.對數(shù)據(jù)規(guī)定格式
下面我們一一介紹如何進(jìn)行控制。
3.設(shè)定系統(tǒng)選項
在你用PRINT過程步產(chǎn)生報表之前,你可以先設(shè)定一些系統(tǒng)選項控制報表的樣式,包括:
選項 |
功能 |
LINESIZE= |
設(shè)定每行的長度 |
PAGESIZE= |
設(shè)定每頁的行數(shù) |
NUMBER|NONUMBER |
設(shè)定是否顯示頁碼 |
PAGENO= |
設(shè)定開始頁碼 |
DATE|NODATE |
設(shè)定是否顯示日期和時間 |
每一個系統(tǒng)選項都有缺省設(shè)置,例如,在缺省情況下,會自動顯示頁碼。
你可以用以下任一方法改變這些系統(tǒng)選項:
1)用OPTIONS語句
一般形式為: OPTIONS options;
例如: options pagesize=20linesize=76;
options numberpageno=1;
OPTIONS語句可以出現(xiàn)在SAS程序的任意地方,從語句被執(zhí)行的地方開始,設(shè)定的系統(tǒng)選項起作用,一直到你改變它的設(shè)置。
例如: options nonumber nodate;
proc printdata=sales.qtr3;
proc printdata=sales.qtr4;
options date;
run;
則在顯示SALES.QTR3的時候頁碼和日期時間均不顯示,而在顯示SALES.QTR4的時候頁碼不顯示但日期時間顯示。注意,SAS系統(tǒng)要遇到DATA、PROC或RUN等關(guān)鍵詞的時候才執(zhí)行會執(zhí)行前面一個程序步,因此,OPTIONS語句要遇到其后的這些關(guān)鍵詞時才會被執(zhí)行,但它會在其所屬的程序步中優(yōu)先執(zhí)行。
2)用OPTIONS窗口
另一個改變系統(tǒng)選項的簡單方法是進(jìn)入OPTIONS窗口:
選擇: Globals à Options àGlobal Options
找到想要設(shè)定的選項,作相應(yīng)的改變即可。
4.NOOBS選項
你可以在PROC PRINT語句中使用NOOBS選項去掉報表中的觀測號列。例如:
proc printdata=sales.qtr4 noobs;
run;
事實上,PROC PRINT語句中可以使用的選項很多,詳細(xì)情況可利用HELP窗口查找:
Help à SAS System àREPORT WRITING àPRINT
5.選擇變量
如果你的數(shù)據(jù)集中有很多變量,而你只希望顯示其中的一部分,你可以在PRINT過程步中用VAR語句指定要顯示的變量。其一般形式為:
VAR variables;
例如: var age height weight fee;
輸出報表中的變量按照在VAR語句中出現(xiàn)的順序排列。
注意,變量之間用空格分開。
6.選擇觀測
如果你只需要顯示數(shù)據(jù)集中的某一部分觀測,而不是所有的觀測,你可以在PRINT過程步中用WHERE語句設(shè)定要顯示的觀測應(yīng)滿足的條件。
1)WHERE語句的一般形式為:
WHEREwhere-expression;
條件表達(dá)式的寫法同第三章中所述相類似。例如:
whereweight<175;
where name='Almers,C';
注意,對字符型變量,條件表達(dá)式中的數(shù)據(jù)值用單引號括起,并且區(qū)分大小寫。
2)復(fù)合條件
你也可以在多個條件的基礎(chǔ)上選擇你要顯示的觀測,這時候你可以在條件表達(dá)式中用AND(&)和OR(|)算符,例如:
where age<=55and weight >160; whereage<=55 & weight >160;
where fee=124.80 orfee=178.20; where fee=124.80 |fee=178.20;
3)IN算符
如果對同一個變量用多個值進(jìn)行條件檢驗的話,可在條件表達(dá)式中用IN算符,例如:
where fee in(124.80,178.20);
4)多重復(fù)合條件
當(dāng)你在條件表達(dá)式中用到一個以上AND(&)和OR(|)算符時,應(yīng)該用括號來決定那些條件先復(fù)合,再與其它條件復(fù)合,例如:
where (age<=55and weight >160) or height >70;
where age<=55and (weight >160 or height >70);
顯然是兩個不同的條件。如果不加括號,則照前兩個先復(fù)合的方法進(jìn)行。
7.對數(shù)字型變量求和
你可以利用SUM語句對數(shù)字型變量求和,在輸出的報表中,該變量所在列的最下方顯示這一列數(shù)值的和。SUM語句的一般形式為:
SUM variables;
例如: proc print data=vcrsales;
varsalesrep region;
sumunitcost unit sold;
run;
在SUM語句中出現(xiàn)的變量名不需要在VAR語句中指定,也會在輸出報表中顯示。
8.對數(shù)據(jù)進(jìn)行排序
如果你希望在報表中的觀測是按照指定的順序排列的話,就應(yīng)當(dāng)在利用PRINT過程步創(chuàng)建報表之前,用SORT過程步對數(shù)據(jù)進(jìn)行排序。一個簡單的SORT過程步的一般形式為:
PROC SORTDATA=SAS-data-set OUT=SAS-data-set;
BY variables;
RUN;
過程步以PROC SORT語句開始,其中,DATA=選項指明要讀的數(shù)據(jù)集,BY語句是SORT過程步所必需的,它指明要按照哪個(那些)變量的值來進(jìn)行排序。
OUT=選項指定一個輸出數(shù)據(jù)集,在這個數(shù)據(jù)集中,所有的觀測按指定的順序排列。注意,如果不使用OUT=選項的話,在DATA=選項中指明的數(shù)據(jù)集就會被永久性地改變,而如果你只是希望它臨時改變的話,就必須用OUT=選項指定一個臨時的輸出數(shù)據(jù)集。
9.題注(Titles)和尾注(Footnotes)
在SAS報表中,可以出現(xiàn)題注和尾注,題注出現(xiàn)在每一頁的頂部,尾注出現(xiàn)在每一頁的底部,如果沒有定義,缺省的題注是‘The SAS System’,尾注不定義就不出現(xiàn)。
1)顯示題注(Titles)
你可以改變輸出報表中的題注,方法有:
A.用TITLES窗口
選擇Globals à OptionsàTitles
進(jìn)入TITLES窗口,在相應(yīng)位置輸入你希望作為題注的文字,
選擇Edit à End
退出即可。
SAS系統(tǒng)允許有10個題注。
B.用TITLE語句
在產(chǎn)生報表的過程步中或之前用TITLE語句設(shè)定題注,其一般形式為:
TITLEn 'titletext';
例如: title1 'July Report';
title3 'group1';
用TITLE語句同樣可以設(shè)定10個題注。
2)顯示尾注(Footnotes)
你還可以改變輸出報表中的尾注,方法與改變題注的方法相似:
A.用FOOTNOTES窗口
選擇Globals à OptionsàFootnotes
進(jìn)入FOOTNOTES窗口,在相應(yīng)位置輸入你希望作為尾注的文字,
選擇Edit à End
退出即可。
SAS系統(tǒng)允許有10個尾注。
B.用FOOTNOOT語句
在產(chǎn)生報表的過程步中或之前用FOOTNOTE語句設(shè)定尾注,其一般形式為:
FOOTNOTEn 'footnotetext';
例如: footnote1 'PrepareedJuly 15';
footnote3 'byfinancial department';
用FOOTNOTE語句同樣可以設(shè)定10個尾注。
3)改變題注和尾注的設(shè)定
題注和尾注的設(shè)定都是全局性的,設(shè)定以后,它們的作用一直延續(xù)到你重新設(shè)定或退出SAS系統(tǒng)。在設(shè)定了題注和尾注之后,你如果希望改變或取消這些設(shè)定的話,可用以下方法:
A.用TITLES 或FOOTNOTES窗口
進(jìn)入TITLES 或FOOTNOTES窗口,改變或取消其中的設(shè)置。
B.用TITLE 或FOOTNOTE語句
用新的TITLE 或FOOTNOTE語句重新設(shè)定題注或尾注,新的設(shè)定會取代老的設(shè)定。
注意,新的TITLE 或FOOTNOTE語句被執(zhí)行是,除了取代原先同樣號碼的題注或尾注之外,還會取消更大號碼的題注或尾注。
用下列不加號碼或不加文字的語句可取消所有的題注或尾注:
title1;
footnote;
10. 給變量設(shè)定描述性標(biāo)記
如果某些變量名不足以表達(dá)該變量數(shù)據(jù)的性質(zhì),你希望在報表中以更準(zhǔn)確的詞句來作為這些列的標(biāo)記的話,可以在過程步中使用LABEL語句,其一般形式為:
LABEL variable1='label'
Variable2='label';
標(biāo)記可長達(dá)40個字符,并且,必須用引號括起。
你可以用一個LABEL語句,也可以用多個LABEL語句來設(shè)定描述性標(biāo)記。
另外,為了顯示標(biāo)記,在PROC PRINT語句中必須使用LABEL選項。例如:
proc printdata=clinic.therapy label;
var month wjr;
labelwjr='Walk/Jog/Run';
run;
11. 設(shè)定輸出數(shù)據(jù)的格式
你可以利用FORMAT語句設(shè)定變量的輸出格式,以使報表看上去更完美。FORMAT語句的一般形式為:
FORMAT variableformat-name;
例如: format net comma5.0 grosscomma8.2;
format netcommiss dollar9.2;
在某一個過程步中的FORMAT語句設(shè)定的輸出數(shù)據(jù)的格式,僅在同一個過程步產(chǎn)生的報表中起作用。
SAS系統(tǒng)提供許多輸出格式,可用于在FORMAT語句中使用。你可以在SAS的HELP穿口中找到所有 的SAS輸出格式,方法為:
Help à SAS System à SASLANGUAGE à SASFormats and Infortmats
下面是部分常用格式:
格式 |
例 |
顯示結(jié)果 |
COMMAw.d |
Comma8.2 |
1,123.20 |
DOLLARw.d |
Dollar6.2 |
$56.00 |
MMDDYYw. |
Mmddyy6. |
150599 |
w.d |
8.2 |
12203.90 |
12. 自定義輸出格式
在SAS系統(tǒng)中,用戶還可以用FORMAT過程自己定義輸出格式,其一般形式為:
PROC FORMAT;
VALUEformat-name range1='label'
range2='label';
例如: proc format;
value$destfmt 'LON'='London'
'PAR'='Paris'
'HON'='Hongkong';
run;
然后在PRINT過程中的FORMAT語句中就可以自定義的輸出格式了,例如:
(接上例) proc print data=summer;
vardate dest;
formatdata date7. Dest $destfmt;
run;
二.使用TABULATE過程步
使用PRINT過程步你可以以列表的形式顯示數(shù)據(jù)集的內(nèi)容,但有時候你可能更希望以表格的形式對數(shù)據(jù)集中的內(nèi)容進(jìn)行分析,這時候,就可以利用TABULATE過程步來幫助你進(jìn)行這項工作。
1.用TABULATE過程步創(chuàng)建表格
事實上,TABULATE過程步并不是簡單地顯示數(shù)據(jù)集的內(nèi)容,而是對數(shù)據(jù)集中的內(nèi)容進(jìn)行歸納統(tǒng)計以后,根據(jù)用戶的要求,制作各式表格供用戶分析使用。
TABULATE過程步能幫助你方便地設(shè)計你的報表,你可以自由決定表格的形式和結(jié)構(gòu),作出的表格可以是一維的、二維的或三維的。同時,TABULATE過程步能對數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行歸納統(tǒng)計,在表格中顯示一些描述性統(tǒng)計量,例如:
A.SUM(和)
B.MEAN(均值)
C.MINIMUM(最小值)
D.MAXIMUM(最大值)
E.STANDARDDEVIATION(標(biāo)準(zhǔn)偏差)
F.VARIANCE(方差)
等等。
你也可以在TABULATE過程步中進(jìn)行選擇觀測、設(shè)定描述性標(biāo)記、設(shè)定題注和尾注、給數(shù)據(jù)規(guī)定輸出格式等操作。
2.設(shè)計表格
使用TABULATE過程步的關(guān)鍵是計劃,與PRINT過程步不同,TABULATE過程步不會產(chǎn)生缺省的報表,你必須告訴它如何創(chuàng)建表格,因此,在使用TABULATE過程步之前,最好先畫一個草表,以明確你自己到底想要得到一個什么樣的表格。具體說,你需要決定:
A.使用什么數(shù)據(jù)
B.用什么變量對數(shù)據(jù)分類
C.對什么變量進(jìn)行分析
D.表格的形式
3.基本的TABULATE過程步
一個簡單的TABULATE過程步包含以下四條基本語句:
語句 |
功能 |
PROC TABULATE |
啟動過程步,設(shè)定數(shù)據(jù)集 |
CLASS |
設(shè)定分類變量 |
VAR |
設(shè)定分析變量 |
TABLE |
描述產(chǎn)生的表格 |
其中,PROC TABULATE語句作為TABULATE過程步的開頭,是必須要有的,其一般形式為:
PROC TABULATEoptions;
例如: proc tabulatedata=clinic.admit;
其中,DATA=選項決定使用什么數(shù)據(jù)集。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10