工作與學(xué)習(xí) 2008-07-02 19:39:35 閱讀1766 評論6 字號:大中小
第一章 sas是什么
1.SAS系統(tǒng)是一個模塊化的集成軟件系統(tǒng);
—— 數(shù)據(jù)處理和統(tǒng)計領(lǐng)域的國際標(biāo)準(zhǔn)軟件;
—— 世界領(lǐng)先的數(shù)據(jù)分析和信息系統(tǒng);
SAS系統(tǒng)廣泛應(yīng)用于金融、醫(yī)療、運輸、通迅、政府、科研和教育等領(lǐng)域;
SAS含義
Statistical Analysis System
2.SAS系統(tǒng)的主要四大功能
數(shù)據(jù)訪問
數(shù)據(jù)管理
數(shù)據(jù)分析
數(shù)據(jù)呈現(xiàn)
3.SAS系統(tǒng)對50多種數(shù)據(jù)源提供了引擎 ,如: DB2 和 Oracle
-------------------------------------------
第二章 開始sas程序的講解
1.sas程序的介紹
有兩種程序步組成,數(shù)據(jù)步和過程步,每個步通常有若干個SAS語句組成;
數(shù)據(jù)步:以data語句開始,用于創(chuàng)建和處理SAS數(shù)據(jù)集;
過程步:以proc語句開始,主要用戶處理SAS數(shù)據(jù)集;
2.SAS數(shù)據(jù)集
通常分為兩個部分:描述部分(包含數(shù)據(jù)屬性的信息)和 數(shù)據(jù)部分(包含數(shù)值);
數(shù)據(jù)集的列稱為變量(Variable),行稱為觀測(Observation)。
查看數(shù)據(jù)集的描述部分:proc contents data=sas_data_set;run;
查看數(shù)據(jù)集的數(shù)據(jù)部分:proc print data=sas_data_set;run;
4.SAS變量的類型
*字符型變量 (Character Variable )(1-32767字節(jié)),均以字母、下劃線開頭;字符型變量的缺省數(shù)據(jù)用空格表示;
*數(shù)值型變量 (Numerical Variable )默認(rèn)為8個字節(jié)的長度,數(shù)值型變量的缺省數(shù)據(jù)用點(.)表示;
5.變量的命名規(guī)范:1-32個字符長度,不區(qū)分大小寫,以下劃線或字母開頭
-------------------------------------------
第三章 sas數(shù)據(jù)倉庫
1.每次SAS啟動都自動生成三個庫標(biāo)記:WORK、SASUSER和SASHELP;
2.庫的分類
永久性庫:sasuser、sashelp、自定義的庫
臨時性庫:只有一個,名為WORK,可以省略庫標(biāo)記;每次啟動SAS自動生成,結(jié)束SAS后庫中的數(shù)據(jù)被自動刪除;
用libname指定庫標(biāo)記,如:libname temp“e:\temp\data”;
3.使用關(guān)鍵詞_ALL_列出數(shù)據(jù)倉庫中所有的sas文件,使用NODS option來禁止對數(shù)據(jù)集的描述
PROC CONTENTS DATA=libref._ALL_ NODS;
RUN;
注意:NODS選項只能和_ALL_一起聯(lián)用
-------------------------------------------
第四章 數(shù)據(jù)列表報表
1.print過程
語法格式:
proc print data=SAS數(shù)據(jù)集 noobs;
var 分析變量1 分析變量2 ... 分析變量n;
where 表達(dá)式;
sum 求和變量;
run;
Noobs選項:在PRINT過程中可以用NOOBS選項去掉OBS列;
VAR語句:控制變量的出現(xiàn)與否以及出現(xiàn)的順序;
WHERE語句:控制哪些觀測將出現(xiàn)在報表中;它的表達(dá)式主要是操作數(shù)和操作符,
SUM語句:計算變量的總合;
2.觀測的排序和分組§(sort)和(by)
對數(shù)據(jù)進(jìn)行分組并求每組小計,用PRINT過程的BY語句,但必須先對相應(yīng)的變量進(jìn)行排序;
如:proc sort data=temp.empdata out=temp.empdata2;
By JobCode;
Run;
proc print data=temp.empdata;
by JobCode;
sum Salary;
pageby JobCode; /*使產(chǎn)生的報表按組分頁*/
run;
-------------------------------------------
第五章:輸出
1.標(biāo)題和腳注:
在所有的SAS報告中都可以加標(biāo)題(Title)和腳注(Footnote):
語法格式:TITLEn ‘text’;
FOOTNOTEn ‘text’;
特點:n 的取值范圍是1-10;
標(biāo)題出現(xiàn)在每頁的頂部;
腳注出現(xiàn)在每頁的底部;
如果沒有定義標(biāo)題,缺省的標(biāo)題是:“The SAS System”;
如果沒有腳注就不出現(xiàn);
沒有n的標(biāo)題和腳注就是:TITLE1、FOOTNOTE1;
定義的標(biāo)題和腳注一直有效,知道另一個語句被執(zhí)行;
帶n的標(biāo)題或腳注被執(zhí)行后,替代了原先具有同樣號碼的標(biāo)題和腳注;
帶n的標(biāo)題或腳注被執(zhí)行后,取消了更大號碼的標(biāo)題和腳注;
2.LABEL語句:產(chǎn)生用戶化和容易閱讀的表頭:
如:label 變量1=’標(biāo)簽’ 變量2=’標(biāo)簽’;
屬性:是最大長度為256個字符串;
注意:在PRINT過程中必須用PRINT語句中的LABEL或SPLIT=選項才能被顯示;
在過程步中定義只在該過程中有效;
在數(shù)據(jù)步中定義就被存在數(shù)據(jù)集的描述部分與數(shù)據(jù)集一直有效;
3.format的使用
分類:系統(tǒng)format和用戶自定義format
4.用戶自定義format的使用
format變量的語法格式:<$>format<w>.<d>
在VALUE語句中,格式可以賦予為:
A.單個數(shù)字:如:
Proc format;
Value gender 1=’Female’
2=’Male’
Other=’Miscoded’;
Run;
B.某數(shù)字范圍:如:
Proc format;
Value boadfmt low-49=’Below’
50-99=’Average’
100-high=’Above Average’;
Run;
C.字符或字符串:如:
Proc format;
Value $grade ‘A’=’GOOD’
‘B’-‘D’=’PAID’
‘I’,’W’=’POOR’
‘PILOT’=’pilot’
Other=’Miscoded’;
Run;
format的使用步驟:
第一步:用戶創(chuàng)建format
PROC FORMAT;
VALUE format-name range1='label '
range2='label '
. . . ;
RUN;
第二步:應(yīng)用所創(chuàng)建的format
proc print data=ia.empdata;
format [$]varialble-name format-name;
run;
5.使用ODS創(chuàng)建html報表(利用ODS將SAS輸出結(jié)果生成HTML格式文件)
ODS--Output Delivery System
語法格式:ODS HTML FILE='HTML-file-specification' <options>;
產(chǎn)生輸出的sas代碼
ODS HTML CLOSE;
第六章 創(chuàng)建sas數(shù)據(jù)集
1.列輸入(column input)
*此模式讀入外部原始數(shù)據(jù)文件,適應(yīng)文件為:
數(shù)據(jù)固定在某些列中;
數(shù)據(jù)只包含標(biāo)準(zhǔn)的數(shù)字和字符;
*過程:
a.開始一個數(shù)據(jù)步,并給數(shù)據(jù)步命名
b.用infile指明原始數(shù)據(jù)的存放位置
c.用input指明怎樣讀取原始數(shù)據(jù)
*格式:
data 庫名.數(shù)據(jù)集名;
infile '文件名(路徑)' <選項>;
input 變量名 <$> 起始列-結(jié)束列; ($用在變量是字符型)
run;
2.格式輸入(formatted input)
*適合用格式輸入的外部原始數(shù)據(jù)文件
數(shù)據(jù)是固定列;
但含有標(biāo)準(zhǔn)或者不標(biāo)準(zhǔn)字符以及數(shù)字的文件;
*語法格式:
data SAS數(shù)據(jù)集;
Infile ‘外部原始文件’;
INPUT 指針控制 變量名 <$> 格式名;($表示字符型變量)
Run;
*指針的控制:
@n 移動指針到第幾列(絕對位置)
+n 把指針移動幾個位置(相對位置)
3.輸入格式informat
<$>informat-namew.<d>
說明:
$ 如果是字符型,使用$
informat-name是輸入格式的格式名
w 是變量總長度
. 句點是必修的分隔符,不能缺少
d 如果是數(shù)值型的話, d指定了小數(shù)位的長度
4.分配變量屬性
變量的臨時屬性和永久屬性:
PROC步可賦予臨時屬性:其中的標(biāo)簽只在該步顯示時有,并沒存在數(shù)據(jù)集里;
如:proc print data=temp.dfwlax label;
Label Dest=’Destination’
FirstClass=’First Class Passengers’;
Run;
DATA步可賦予永久屬性:其中的標(biāo)簽被存在數(shù)據(jù)的描述部分,與數(shù)據(jù)集一起存在;
如: data temp.dfwlax;
Infile ‘‘c:\course\tempdata.dat’;
Input @12 Dest $3. @15 FirstClass $3. ;
Label Dest=’Destination’ FirstClass=’First Class Passengers’;
Run;
---------------------------------------------------------------------------------------
第七章 數(shù)據(jù)步程序設(shè)計
1.讀sas數(shù)據(jù)集以及創(chuàng)建變量
用DATA步產(chǎn)生SAS數(shù)據(jù)集的三種方法:
A.數(shù)據(jù)在作業(yè)流中:
DATA 語句;
INPUT 語句;
CARDS;
數(shù)據(jù)行;
;
RUN;
B.數(shù)據(jù)在磁盤上:
DATA 語句;
INFILE 語句;
INPUT 語句;
RUN;
C.數(shù)據(jù)來自其它SAS數(shù)據(jù)集:
DATA 語句;
SET / MERGE / UPDATE / MODIFY語句;
<DATA步中的其它SAS語句>;
RUN;
2.用已有的數(shù)據(jù)集創(chuàng)建另一個數(shù)據(jù)集[set的使用]
DATA 新的數(shù)據(jù)集名;
SET input-SAS-data-set;
<additional SAS statements>
RUN;
3.sas操作符和函數(shù)的使用
語法格式:function-name(argument1,argument2, . . .)
函數(shù):sum(argument1,argument2, . . .);
TODAY();
MDY(month,day,year);
QTR(SAS-date);
MONTH(SAS-date);
WEEKDAY(SAS-date);
4.有條件的程序
語法結(jié)構(gòu):
簡單if語句
IF expression THEN statement;
ELSE statement;
復(fù)雜if語句
IF expression THEN DO;
executable statements
END;
ELSE DO;
executable statements
END;
設(shè)置變量長度
LENGTH variable(s) $ length;
取數(shù)據(jù)集子集
a.WHERE語句
b.DELETE語句
IF expression THEN DELETE;
c.子集IF語句
IF expression;
使用sas日期常數(shù)
格式: 'ddMMMyyyy'd
例如:(example: '14dec2000'd)
說明:'d是必須的,用來把引號里的字符串轉(zhuǎn)換成sas日期
--------------------------------------------------------------------------------------------
第八章 數(shù)據(jù)拼接
1.使用set連接sas數(shù)據(jù)集
語法格式:
DATA SAS-data-set ;
SET SAS-data-set1 SAS-data-set2 . . . ;
<additional SAS statements>
RUN;
set中變量重命名
語法格式:
SAS-data-set(RENAME=(old-name-1=new-name-1
old-name-2=new-name-2 .
.
.
old-name-n=new-name-n));
交叉sas數(shù)據(jù)集,使用by語句
BY語句:使用BY語句可使生成的數(shù)據(jù)集按某變量排序,但輸入數(shù)據(jù)集必先按該變量排序過;
語法格式:
DATA SAS-data-set;
SET SAS-data-set1 SAS-data-set2 . . . ;
BY BY-variable;
<other SAS statements>
RUN;
2.MERGE sas數(shù)據(jù)集(必先排序)
MERGE語法格式:
DATA SAS-data-set;
MERGE SAS-data-sets;
BY BY-variable(s);
<additional SAS statements>
RUN;
IN= 選項
格式:SAS-data-set(IN=variable)
解釋:一個臨時的數(shù)字類型的變量,其值為0或者1
IN選項,當(dāng)讀入多個SAS數(shù)據(jù)集時,用IN選項可確定本觀測來自哪個數(shù)據(jù)集;
variable=0表示觀測不是來自本數(shù)據(jù)集
variable=1表示觀測是來自本數(shù)據(jù)集
-------------------------------------------
第九章 制作匯總報表
1.基本的匯總報表(freq、mean)
freq報表默認(rèn)的情況下:
分析每一個變量,顯示出每一個數(shù)據(jù)值,計算出數(shù)字類型的每列的百分比,指出每一個變量有多少條觀測中有缺失值
用此過程一般有兩個目的:
1:描述過程:產(chǎn)生頻數(shù)表和交叉表,可簡潔的描述數(shù)據(jù);
2:統(tǒng)計過程:產(chǎn)生各種統(tǒng)計量(頻數(shù)、百分比),分析變量間關(guān)系;
使用:
A.單項頻數(shù)表:PROC FREQ DATA=SAS數(shù)據(jù)集;
TABLES 變量;
RUN;
B.雙向交叉表:PROC FREQ DATA=SAS數(shù)據(jù)集;
TABLES 行變量*列變量;
RUN;
C.n向交叉表:PROC FREQ DATA=SAS數(shù)據(jù)集;
TABLES a*b*c*d;
RUN;
如果要一張三向(或n向)交叉表 ,只要在TABELS語句中用星號將3個(或n個)變量名連接起來。
最后一個變量的值形成列,倒數(shù)第二變量的值形成行,其余變量的每一水平(或水平的組合)形成一層.
2.MEAN過程
對數(shù)據(jù)集中的數(shù)值變量計算簡單描述統(tǒng)計量(個數(shù)、均值、標(biāo)準(zhǔn)差、最大值、最小值);
如:proc means data=temp.crew;
Var Salary;
Class JobCode;
Run;
3.REPORT 程序
REPORT過程將PRINT、MEANS、和TABULATE過程與DATA步報表寫法的特點結(jié)合起來成為一個強有力的編寫報表的過程;它的一般形式:
格式:
PROC REPORT DATA=SAS數(shù)據(jù)集 [選項];
BREAK BEFORE|AFTER break變量 [/選項];
COLUMN 顯示變量;
DIFINE 處理變量 [/選項];
RBREAK AFTER|BEFORE [/選項];
Run;
例子:
proc report data = temp.crew nowd headline headskip ;
column JobCode Location Salary; /*column: 顯示的列*/
define Location / order 'Home Base'; /*order表示Location是排序變量,引號中的是列抬頭*/
define JobCode / group width=8 'Job Code'; /*group說明JobCode是分組變量、width指明變量寬度 */
define Salary / format = dollar10.; /*format: 輸出格式*/
rbreak after /summarize dol; /*結(jié)尾產(chǎn)生一總匯總值,其中 dol是兩虛線*/
run;