




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
數據修改及程序結構第一頁,共七十二頁,2022年,8月28日1.賦值語句語句格式:
variable=expression;將表達式結果賦予一個變量。
說明:
第二頁,共七十二頁,2022年,8月28日Dataa;x=15;grp=“A”;Run;例如,DATAda1;INPUTx1x2x3x4$;y=x1+x2+x3;average=mean(x1,x2,x3);id_num=_n_;total=x3+x4;/*數值+字符*/CARDS;31.20.5522.40.9753.20.89
;RUN;表達式的值賦給變量第三頁,共七十二頁,2022年,8月28日結果變量類型決定結果變量類型的準則:如果表達式中的變量全為數值型,結果變量為數值型如果表達式中的變量全為字符型,結果變量為字符型如果表達式中的變量既有數值又有字符型,結果變量為數值型如果賦值給已定義變量,則將表達式的值轉換成該變量的類型,若無法轉換,則給予缺失值,并在Log窗口中給出轉換信息第四頁,共七十二頁,2022年,8月28日表達式值轉換數值轉字符dataa;X1="Passed";output;X1=86;output;run;proc
print;run;第五頁,共七十二頁,2022年,8月28日表達式值轉換字符轉數值,不能轉換時則報錯dataa;X1=86;output;X1="92";
output;X1="Passed";
output;run;proc
print;run;第六頁,共七十二頁,2022年,8月28日結果變量長度結果變量的長度由第一次賦值的長度決定,除非事先由LENGTH語句規定好變量的長度例如,dataa;Name=“張三”;Output;Name=“歐陽踏歌”;Output;procprint;run;/*第一次賦值時的長度為4,則變量長度定義為4*//*賦值長度為8,但只接受前前4個長度*/輸出結果:ObsName
1張三2歐陽第七頁,共七十二頁,2022年,8月28日解決辦法:1.先用LENGTH語句定義長度2.在第一次賦值時添加足夠空格dataa;Lengthname$8;Name=“張三”;Output;Name=“歐陽踏歌”;Output;procprint;run;輸出結果:ObsName
1張三2歐陽踏歌dataa;Name=“張三”;Output;Name=“歐陽踏歌”;Output;procprint;run;第八頁,共七十二頁,2022年,8月28日2.累加語句語句格式:
Variable+expression;將表達式的值累加到變量(Variable)上
選項說明:
第九頁,共七十二頁,2022年,8月28日應用準則累加變量在第一次執行前的初始值為0;表達式的計算結果為缺失值時,取0代替;表達式可以使用比較算符;語句A+(-B)中的(+)是必須的,不能寫成A-B。第十頁,共七十二頁,2022年,8月28日dataa;inputidsex$;m=m+1;/*賦值語句不能累加*/ifsex=“F”
thenK+1;/*條件累加*/cards;1F2M3F4F5M;run;proc
print;run;例如,ObsidsexmK11F.122M.133F.244F.355M.3第十一頁,共七十二頁,2022年,8月28日賦值語句+RETAIN語句可實現累加
Retain語句使得其指定的變量的值在執行下一次DATA步重復時被保留,而不被清空為缺失值。如果沒有RETAIN語句,SAS系統在DATA步每次重復執行之前,把用INPUT或賦值語句指定的變量設置為缺失值。retainn0;retainvar1-var3(123);retainvar1-var4(1,2,3,4);retain;n+1;retainn0;n=n+1;等價于第十二頁,共七十二頁,2022年,8月28日dataa;inputidsex$;Retainm0;/*申明m值保留不清空,初值為0*/m=m+1;/*實現累加*/cards;1F2M3F4F5M;run;proc
print;run;賦值語句+RETAIN語句可實現累加Obsidsexm11F122M133F244F355M3第十三頁,共七十二頁,2022年,8月28日例如,對X平方后再累加dataa;inputidsex$x;total+x**2;/*對X平方后進行累加*/cards;1F802M783F904F855M68;run;proc
print;run;Obsidsexxtotal11F80640022M781248433F902058444F852780955M6832433第十四頁,共七十二頁,2022年,8月28日3.DELETE語句作用:DELETE語句停止處理當前觀測,該觀測值不被讀入到創建的數據集,SAS系統返回到DATA步的開頭處理其他觀測。語句格式:DELETE;
通常與if使用,刪除滿足條件的觀測第十五頁,共七十二頁,2022年,8月28日例如,與if語句聯用,刪除部份觀察例如:datajn;inputssngrapre1pre2;ifgra<7thendelete;total=pre1+pre2;cards;876881331085796787913179078;run;創建的數據集jn中,不包括變量gra的值小于7的那些觀測。即,不輸出gra小于7的觀察第十六頁,共七十二頁,2022年,8月28日例如,清空一個數據集datab;seta;
delete;run;例中,刪除數據集B中的所有觀測值,即清空數據集B,只保留數據集A的變量結構。第十七頁,共七十二頁,2022年,8月28日4.DROP語句和KEEP語句作用:DROP語句申明不輸出到數據集中的變量KEEP語句申明需要輸出到數據集中的變量語句格式:DROP變量名列表;
KEEP變量名列表;
第十八頁,共七十二頁,2022年,8月28日例如,指定不輸出到數據集中的變量如:dataparts;inputNopartapartb;test=parta+partb;droppartapartb;cards;34541545;run;DROP語句告訴SAS系統,在新的數據集parts中不包含變量parta和partb。第十九頁,共七十二頁,2022年,8月28日例如,指定需要輸出到數據集中的變量如:dataparts;inputNopartapartb;test=parta+partb;keepnotest;cards;34541545;run;KEEP語句告訴SAS系統,在新的數據集parts中只包含變量no和test。第二十頁,共七十二頁,2022年,8月28日5.STOP語句STOP語句停止處理DATA步。當遇到STOP語句時,正被處理的那個觀測不會添加到SAS數據集中。語句格式:STOP;
通常與條件語句聯用第二十一頁,共七十二頁,2022年,8月28日數據步循環執行到第4次,即x=4,y=9時,n=6,滿足n>4的條件,執行STOP語句,則立即停止數據步的執行,正被處理的那條觀測不會被添加到數據集A中。A中只有3條觀察。dataa;inputxy;ifx=4
thenn+2;IFn>4THENSTOP;cards;2542484972;run;proc
print;run;例如,STOP停止處理DATA步Obsxyn
1250
2422
3484第二十二頁,共七十二頁,2022年,8月28日6.ABORT語句ABORT語句中止執行當前的DATA步,繼續執行下一個DATA或PROC步。執行ABORT語句時,當新創建數據集和已存在的SAS數據集同名時,不會覆蓋已存在的數據集。語句格式:ABORT<ABEND|RETURN>|<n>;
第二十三頁,共七十二頁,2022年,8月28日數據步循環執行到第4次,即x=4,y=9時,n=6,滿足n>4的條件,執行ABORT語句,則立即停止數據步的執行,正被處理的那條觀測不會被添加到數據集A中。如果數據集A先前已經存在,則不會被替換;如果數據集A先前不存在,則建立數據集A,只有3條觀察。dataa;inputxy;ifx=4
thenn+2;IFn>4THENABORT;cards;2542484972;run;proc
print;run;例如,ABORT停止處理DATA步Obsxyn
1250
2422
3484第二十四頁,共七十二頁,2022年,8月28日dataa;inputxy;ifx=4
thenn+2;IFn>4THENABORT;cards;2542484972;run;proc
print;run;例如,ABORT停止處理DATA步在Log窗口打印錯誤信息第二十五頁,共七十二頁,2022年,8月28日例如,ABORT語句使程序出現錯誤時終止執行datab;inputssnpay;if
_ERROR_then
ABORT;cards;111100aaa200444300;proc
print;run;程序中有錯誤時,自動變量_ERROR_取值為1,否則為0;第二十六頁,共七十二頁,2022年,8月28日7.LOSTCARD語句作用:LOSTCARD語句用于重新對準輸入數據。當一個觀測包含幾個數據行,且當前觀測缺少其中的一些行時,利用LOSTCARD語句可以防止SAS系統從下一個觀測的數據行讀數據作為當前觀測的一部分。語句格式LOSTCARD;使用LOSTCARD語句時,必須用IF-THEN語句給出丟失數據行的條件。適合使用LOSTCARD語句的條件每個觀測有固定的輸入數據行;同一個觀測的每個數據行都有一個同值的識別變量。第二十七頁,共七十二頁,2022年,8月28日例,每個記錄應包含兩行數據,第一行為SID和性別,第二行為SID和兩門功課的成績,讀取信息完整的記錄dataa;inputSIDsex$#2SID1Score1Score2;ifSIDNESID1then
lostcard;cards;101男1018995102女1028598200男211男2117886;proc
print;run;#2表示指針移到該條記錄的第2行ObsSIDsexSID1Score1Score2
1101男1018995
2102女1028598
3211男2117886第二十八頁,共七十二頁,2022年,8月28日LOSTCARD語句的執行步驟SAS日志上輸出一個丟失記錄卡信息,一條標尺及創建當前觀測所讀的數據行;不輸出觀測到數據集,丟棄開始讀入本組的數據行,返回到DATA步開頭;試圖用該組第二個數據行開始并按INPUT語句規定的行數讀數據行來創建觀測;當丟失記錄行的IF條件仍是真的,SAS重復前三步;對于IF條件不成立的一組數據行,SAS創建一個觀測,并增加自動變量_N_的值。第二十九頁,共七十二頁,2022年,8月28日dataa;inputid1x$#2id2y$#3id3z$;ifid1neid2orid2neid3then
lostcard;cards;101A102B102B103C103C103C104D105E105E105E;proc
print;run;例,當每條記錄包含3個數據行時
Obsid1xid2yid3z1103C103C103C2105E105E105E第三十頁,共七十二頁,2022年,8月28日例中,DATA步讀3個數據行作為1個觀測。第1個觀測有2個丟失記錄,第2個觀測有1個丟失記錄,第4個觀測丟失2個記錄。只有第3和第5個觀測是完整的觀測。LOG窗口顯示的信息:NOTE:LOSTCARD.RULE:----+----1----+----2----+----3----+----4----+----5----+----6----5101A6102B7102BNOTE:LOSTCARD.8103CNOTE:LOSTCARD.9103CNOTE:LOSTCARD.11104D12105E13105ENOTE:數據集WORK.A有2個觀測和6個變量。第三十一頁,共七十二頁,2022年,8月28日語句格式
WHERE邏輯表達式;
根據表達式選擇滿足條件的觀察8.WHERE語句表達式中可使用的特殊運算符第三十二頁,共七十二頁,2022年,8月28日WHERE語句的特點WHERE語句的作用是選擇滿足條件的觀測WHERE語句讀入數據集之前選擇觀測WHERE語句是在執行數據集連接(SET),合并(MERGE),更新(UPDATE)或修改(MODIFY)之前進行的操作使用WHERE語句時,由于SAS系統只從輸入數據集中讀入滿足條件的觀測,所以SAS程序運行效率高能用WHERE語句的地方一定可以用IF語句來代替,反之則不一定WHERE語句對數據步中的新變量無效,只對讀取其它已經存在的數據集中的變量有效第三十三頁,共七十二頁,2022年,8月28日例,where語句選擇觀測DATAda1;INPUTx1x2x3x4$;y=x1+x2+x3;average=mean(x1,x2,x3);CARDS;31.20.5522.40.9753.20.89
;RUN;datada2;
setda1;
wherey<8;run;從數據集da1中選擇y<8的觀測第三十四頁,共七十二頁,2022年,8月28日例,where語句選擇觀測DATAda1;INPUTx1x2x3x4$;y=x1+x2+x3;average=mean(x1,x2,x3);Wherey<8;CARDS;31.20.5522.40.9753.20.89
;RUN;錯誤!變量y不是來自已經存在的數據集,不能在where語句中使用;此時,應該用:ify<8;第三十五頁,共七十二頁,2022年,8月28日Whereagebetween
18
and
65;Wheretaxesbetweensalary*0.30
andsalary*0.50;Wheretaxesnotbetweensalary*0.30
andsalary*0.50;Whereidnumismissing;/*idnum為缺失值時*/Wherenameisnull;/*name為空時*/Wherescorein(“A”,”B”);/*score為“A”或“B”時*/Wherenamecontains“B”;/*name中含有“B”的*/例,where語句特殊算符示例第三十六頁,共七十二頁,2022年,8月28日兩個特殊模式:百分號(%)可以替代任意多個字符下劃線(_)正好有一個字符與之匹配LIKE算符DATAda1;
INPUTname$x2x3;CARDS;Boin1.20.5Aan2.40.9Ci3.20.8ooBCi3.20.8;RUN;datada2;
setda1;Wherenamelike'%B_i%';run;匹配含有B開始的任意字符串Wherenamelike'B%';匹配第三個字符為B的任意字符串Wherenamelike
'__B%';匹配含有B間隔一個為i的任意字符串Wherenamelike'%B_i%';第三十七頁,共七十二頁,2022年,8月28日例,
設變量name的取值為名字Diana,Diane,Dianna,Dianthus,Dyan。
使用LIKE算符來選擇第一個字符為D的名字時,LIKE算符的不同選擇模式與結果。NameLike'D_an';/*選擇Dyan*/Name
Like
'D__an_';/*沒有名子被選上*/NameLike'D_an__';/*Diana,Diane,Dianna,Dyan*/NameLike'D_an%';/*上述列表的所有名字*/Name
Notlike'D_an%';/*沒有名子被選上*/第三十八頁,共七十二頁,2022年,8月28日其它應用舉例例,
選擇數值變量非0和非缺失的觀測值Wherex;Wherexandy;Wherex/y;例,選擇字符變量非缺失的觀測Wherec^='';wherecisnotmissing;字符變量C不能單獨地作為邏輯表達式例,選擇一定范圍內的觀測Wherexbetween1and5;where
1<=x<=5;第三十九頁,共七十二頁,2022年,8月28日9.MISSING語句MISSING語句規定缺失值所使用的符號
讀入含有缺失值的數據源時,必須用MISSING語句,否則可能產生讀入錯誤。語句格式
Missing
字符1…字符n;其中:[字符1…]規定代表缺失值的字符。第四十頁,共七十二頁,2022年,8月28日Missing語句規定缺失字符dataa;missingXI;inputId$4.x1x2x3x4x5;cards;10011154565I781002862755728610049352X768810157335431121081027101127397679;Run;MISSING語句規定用字符X和I表示缺失值。如果不用MISSING語句,當讀入數值變量的缺失值時(這里為X和I),產生錯誤。第四十一頁,共七十二頁,2022年,8月28日10.LIST語句LIST語句在SAS日志窗口上列出正被加工處理觀測的輸入數據行。LIST語句被執行時,在列出的第一行記錄之前,顯示一條指示列數的標尺。語句格式LIST;
第四十二頁,共七十二頁,2022年,8月28日dataa;missingab;inputagesex$;ifmissing(age)then
list;cards;12M33FbF56M33MaM67F;run;例,讀入數據時使用LIST語句列出age缺失的觀測/*不能用“age=.”來判斷缺失*/第四十三頁,共七十二頁,2022年,8月28日11.LABEL語句LABEL語句給指定的變量添加標簽注解語句格式LABEL變量名1=“標簽1”…變量名n=“標簽n”;
dataa;inputagesex$;Labelage=“年齡”sex=“性別”;cards;12M33F67F;run;第四十四頁,共七十二頁,2022年,8月28日12.TITLE語句TITLE語句添加輸出標題。通常位于數據步、過程步外。語句格式TITLEn“標題n”;
dataa;inputagesex$;cards;12M33F67F;run;Title“學生信息數據庫”;Title2“只打印年齡和性別”;Procprint;run;學生信息數據庫只打印年齡和性別Obsagesex112M233F367F第四十五頁,共七十二頁,2022年,8月28日數據步循環與結構控制第四十六頁,共七十二頁,2022年,8月28日一、DO語句
DO語句必須由一個END語句來結束
DO和END語句之間的這些語句稱為一個DO程序塊
DO程序塊可以嵌套DO語句有5類簡單DO語句循環DO語句
DOOVER語句
DOWHILE語句
DOUNTIL語句第四十七頁,共七十二頁,2022年,8月28日1.簡單DO語句語句格式(定義DO程序塊)DO;[一些SAS語句]END;通常與條件語句聯用,以條件執行某些語句第四十八頁,共七十二頁,2022年,8月28日Dataa;Inputx
@@;ifx>5thenDO;y=x**2;put
x=y=;END;z=x+3;Cards;648938;Run;例,與條件語句聯用執行運行后有哪些輸出?第四十九頁,共七十二頁,2022年,8月28日2.循環DO語句語句格式:DO循環變量=初值
TO終值by增量;(重復執行的SAS語句)END;循環DO語句根據循環變量重復執行DO和END語句之間的語句
循環變量包含在創建的數據集中,可以用DROP語句刪除缺省“by增量”時,默認步長為1第五十頁,共七十二頁,2022年,8月28日如:
doi=2to6by2;x=i**2;end;當i=2、4、6時,執行do-end之間的語句組;在i=6的循環執行之后,下一次循環時i=8,大于終值6,則循環停止。逗號分隔循環變量的取值(數值或字符)
doi=2,11,15,19to27;語句end;dogrp=‘A’,’B’,’C’;語句end;第五十一頁,共七十二頁,2022年,8月28日例:打印九九乘法表
1*1=1
2*1=2
2*2=4
3*1=3
3*2=6
3*3=9
4*1=4
4*2=8
4*3=12
4*4=16
5*1=5
5*2=10
5*3=15
5*4=20
5*5=25
6*1=6
6*2=12
6*3=18
6*4=24
6*5=30
6*6=36
7*1=7
7*2=14
7*3=21
7*4=28
7*5=35
7*6=42
7*7=49
8*1=8
8*2=16
8*3=24
8*4=32
8*5=40
8*6=48
8*7=56
8*8=64
9*1=9
9*2=18
9*3=27
9*4=36
9*5=45
9*6=54
9*7=63
9*8=72
9*9=81需要用到的語句與函數:
do循環語句,put語句,left()
trim()函數,||表示字符串連接data
_NULL_;doi=1
to
9;
doj=1
toi;k=i*j;str=trim(left(i))||'*'||trim(left(j))||'='||left(k);
put#i@(9*j+9)str@;
end;end;run;
第五十二頁,共七十二頁,2022年,8月28日DO循環語句特殊選項用法Start<TOstop><BYincrement><WHILE/UNTIL(expression)>;
選項說明第五十三頁,共七十二頁,2022年,8月28日doi=1
to
10
while(x<y);doi=2
to
20
by
2
until((x/3)>y);doi=10
to
0
by–1while(month='jan');例,DO循環語句使用表達式選項dataa;doi=3,7,11
to
17
by
3
while(i**2<200);j=i**2;
putij;end;run;第五十四頁,共七十二頁,2022年,8月28日例用DO循環產生指定觀測值個數的數據集。dataa;doi=1
to
100;k+i;output;end;Putk=;run;例中,產生一個含有100個觀測值的數據集,并通過k+i求出1到100的自然數之和。
第五十五頁,共七十二頁,2022年,8月28日條件成立時重復執行DO組中的語句。語句格式:DOWHILE(expression);
其中,(expression)是用括號括起來的任一有效表達式。執行循環前先計算這個表達式,如果它為真,則DO組被執行Dataa;n=0;dowhile(n<5);
putn=;n+1;end;Run;這個DO組共被執行了5次。3.DOWHILE語句第五十六頁,共七十二頁,2022年,8月28日重復執行DO組中的語句直到條件為真。語句格式:DOUNTIL(expression);
其中,(expression)是用括號括起來的任一有效表達式。它是在DO組中的語句被執行之后,在循環的最后計算這個表達式,如果它為真,則DO組就不再被執行。這個DO組共被執行了5次。Dataa;n=0;dountil(n>=5);
putn=;n+1;end;Run;4.DOUNTIL語句第五十七頁,共七十二頁,2022年,8月28日5.DOOVER語句DOOVER語句對隱含下標數組元素執行DO組里的語句語句格式DOOVER
數組名;[若干SAS語句]END;
其中,數組名規定一個隱含下標數組
第五十八頁,共七十二頁,2022年,8月28日例所有變量乘以100datatest;inputx1-x5;arrayscorex1-x5;do
overscore;score=score*100;end;cards;.95.88.99.77.56;run;Score為定義的隱含下標的數組,DOOVER對數組里的每一個元素執行循環操作第五十九頁,共七十二頁,2022年,8月28日6.END語句END語句是組成DO組或SELECT組的最后一個語句,不能缺少。語句格式END;
如,DO;
[若干個SAS語句]END;
如,SELECT(expression);When(expression)SAS語句;
OtherwiseSAS語句;END;第六十頁,共七十二頁,2022年,8月28日7.CONTINUE語句CONTINUE語句停止當前的這次循環過程,繼續進行下一次循環。
語句格式:CONTINUE;第六十一頁,共七十二頁,2022年,8月28日
例,CONTINUE語句停止當前的循環過程,繼續進行下一次循環。dataa;doi=1
to
10;
inputname$idnostatus$;
ifstatus='PT'
then
continue;
puti=;
inputbenefits$10.;
output;end;cards;/*接下頁*//*返回到DO語句,進行下次循環*/第六十二頁,共七十二頁,2022年,8月28日(接上頁)Jones9011PTThomas876PTRichards1002FTEye/DentalKelly85111PTSmith433FTHMOKelly85111PTSmith433FTHMOJones9011PTThomas876PTRichards1002FTEye/Dental;Run;proc
print;run;第六十三頁,共七十二頁,2022年,8月28日第六十四頁,共七十二頁,2022年,8月28日8.LEAVE語句LEAVE語句停止當前DO組循環或SELECT組的處理過程,并繼續執行DO組或SELECT組后面的語句。
語句格式:LEAVE;第六十五頁,共七十二頁,2022年,8月28日例,給定條件下停止DO循環的處理過程根據工齡發紅包,每年50元,500元封頂。試計算以下人員到1991年時每人可得的紅包金額。姓名入職年份張三
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設備設施保養管理制度
- 設立網絡保密管理制度
- 設計單位公司管理制度
- 設計項目售后管理制度
- 診所安全用電管理制度
- 診所藥房倉庫管理制度
- 試驗檢測臺賬管理制度
- 財務資料安全管理制度
- 財政分局合同管理制度
- 貨款回收利息管理制度
- 海洋環境監測
- 五年(2020-2024)高考物理真題分類匯編 專題01 力與物體的平衡(解析版)
- 腹主動脈瘤的護理查房
- 腹腔鏡下膽囊切除術
- DB11∕T 1071-2014 排水管(渠)工程施工質量檢驗標準
- 2024年全國寄生蟲病防治技能競賽備賽試題庫-下(包蟲病、其它寄生蟲病)
- 年產60萬臺(套)新能源汽車充電樁項目可行性研究報告寫作模板-拿地申報
- 醫務人員依法執業測試試題
- 浙江省溫州十校聯合體2023-2024學年第二學期高二下學期6月期末聯考+技術答案
- 【A市網球運動發展現狀及對策探究開題報告2000字】
- 2024年山東省消防工程查驗技能競賽理論考試題庫-下(多選、判斷題)
評論
0/150
提交評論