SAS分支條件語句的語法格式哪種是正確的
有了控制結構就可以控制程序執行的流程。如果沒有復選控制流語句,程序便從左至右,自上向下地逐句執行這些語句。有些簡單的程序可以只用單項流程來編寫,有些流程可以依靠運算符的優先級來控制,但任何編程語言的功能和用途都是通過結構和循環改變語句順序的能力而得到。
Visual Basic過程能夠測試條件式,然后根據測試結果執行不同的操作。Visual Basic支持的判定結構有If…Then、If…Then…Else和Select Case。
可以用If…Then結構有條件地執行一個或幾個語句。單行語法和多行語法都可以使用:
If 條件 Then 語句
If 條件 Then
語句
End If
條件通常是比較式,但它可以是任何計算數值的表達式。Visual Basic把這個值解釋為True或False。一個為零的數值為False,而任何非零的數值都被看做True。如果條件為True,則Visual Basic執行關鍵字Then后面的所有語句。
If…Then的單行格式不用End If語句。如果條件為True時要執行幾行代碼,則必須使用多行塊If…Then…End If語法。
希望我能幫助你解疑釋惑。
if 語句or問題
or是“或”的意思,如果邏輯表達式中全是“或”的關系,如:比1000大或比100大或比10大,按照邏輯運算法則和編譯原理,只要滿足一個條件,就沒必要再看后面的條件了。
用and 還是用 or,取決于你的邏輯意圖:
如果是要么有學生證,要么不足12歲,要么身高小于1.4米,只要滿足任何一條,坐火車可以半票,那么就得都用or,如果你有學生證,滿足了第一條,后兩條就可以不看。同樣,不滿足第一條,但滿足第二條,第三條則可以不看。
如果你的意圖是,這三條,有任何一條不滿足都不行,那就得用and
比如你要找工作,你得本科,你得有學位,你得男性,你得健康,你得專業對口,你得兩年經驗,有任何一條不滿足都不行,這就得用and
or和and也可以進行混合邏輯運算,可以弄得無限復雜,不過就你這個運算,弄懂這些就夠了。
這回明白了嗎?
if和where在SAS中的區別
您好,是這樣的:
將數據集*s第10到15條觀測中滿足條件"ELECTRIC>260"的觀測提取出來,生成新的數據集tmp。
方法一:
data tmp;
set *s(firstobs=10 obs=15);
if ELECTRIC>260;
run;
proc print;
run;
Obs DATE ELECTRIC MASONRY
1 OCT77 278.6 288.7
2 NOV77 276.2 286.2
3 DEC77 274.6 276.7
4 JAN78 262.1 234.3
可見結果輸出4條記錄;
方法二:
data tmp;
set *s(firstobs=10 obs=15);
where ELECTRIC>260;
run;
proc print;
run;
Obs DATE ELECTRIC MASONRY
1 MAY78 278.0 295.5
2 JUN78 289.5 308.3
3 JUL78 296.6 306.9
4 AUG78 305.1 315.3
5 SEP78 307.8 310.6
6 OCT78 308.2 316.3
可見結果輸出6條記錄。
問題是上述兩種方法為什么輸出結果不一樣?請注意if語句和where語句的區別:
區別:
1. if語句是面向PDV(logical program data vector)的,對當前PDV中的數據進行判斷,滿足條件時將其寫入到外部數據集;where語句也是面向PDV的,它使用于從外部數據源讀數據到PDV之前進行判斷,當滿足條件時才被寫入到PDV。顯然一個在寫入PDV之前,一個在寫入PDV之后,兩者是有差異的。
2. 當沒有數據集選項firstobs=10 obs=15時,if語句和where語句用法結果相同,但有這兩個選項時效果就不同了。有這兩個選項,if語句是從原數據集(或數據源)的觀測記錄進行計算個數,即從原數據集的第10號觀測開始讀入到PDV中,然后再判斷是否滿足if條件,若滿足則輸出到外部數據集,直到原數據集的第15號觀測結束。而where語句是在讀入到PDV之前就進行判斷的,所以這里的firstobs的意思是從使得滿足where條件的第10個觀測開始,而不是原數據集的第10個觀測開始。
sas語句如何嵌入中文?很簡單
010',input語句中的輸入格式就會有錯誤.正確的input語句:
input date mmddyy10. time $ open high low close volume amount;
format date mmddyy10.;
run;
另一處錯誤:set ifa(where=(date='05/04/2010'));
在第一個數據步data *;中,定義的數據集名為*,在set語句中,缺省的引用數據集為*.而且語句date='05/04/2010'非法,必須將日期轉換成SAS的日期格式,即data='04/MAY/2011'd;.
更正后的程序如下:
data *;
infile 'C:\Documents and Settings\CY\桌面\*' dlm=',';
input date mmddyy10. time $ open high low close volume amount;
format date mmddyy10.;
run;
data *;
set *(where=(date='04/MAY/2010'd));
run;
程序中可能存在中文輸入法下的標點符號,如果不能運行,可以在這方面著手檢查. 最后建議將第二個數據集命名為*,否則第二個數據步生成的數據集將覆蓋原始數據集.