2016-11-17 44 views
-1

我想用用戶定義的格式爲觀察定義一個新的值。但是,我的if/then/else語句似乎僅適用於年份值爲「2014」的觀察值。 put語句不適用於其他值。在SAS中,put語句在第一個語句中是藍色的,在另外兩個語句中是黑色的。這裏是我的意思圖片:使用用戶自定義格式的put函數有條件地定義一個新字段

enter image description here

有誰知道我在這裏失蹤?這是我的完整代碼:

data claims_t03_group; 
    set output.claims_t02_group; 
    if year = "2014" then test = put(compress(lookup,"_"),$G_14_PROD35.); 
    else if year = "2015" then test = put(compress(lookup,"_"),$G_15_PROD35.); 
    else test = put(compress(lookup,"_"),$G_16_PROD35.); 
    run; 

這裏是我的意思,當我說的過程似乎「工作」於2014年爲例:

enter image description here

正如你所看到的,當Year值爲2014,格式查找正常工作,測試字段返回我期望的值。但是,在2015年和2016年,測試字段將返回查找值而不使用任何格式。

+0

'put'不應該是藍色的,如果它是在上面的代碼 - 這不是在我,反正。你能證實它仍然是藍色的嗎?如果是這樣,那麼你還沒有正確轉錄你的代碼,或者你的代碼早些時候還有其他一些問題(試着只是把這個數據步驟放到新窗口中)。 – Joe

+0

只是爲了澄清,如果它是'語句'是藍色的,如果它是'函數'則是黑色。 'put'是兩件事情,所以取決於語法分析器來解決這個問題。如果你把它看成藍色,那麼它認爲你使用'statement',這意味着它可能看不到'test ='部分。 – Joe

+1

最後,您需要解釋「工作」的含義。你在2014年獲得的價值是什麼,但其他兩個都沒有?或者你在三年內從2014年的格式獲得價值?將數據組合成數據的例子非常有用 - 組成幾種格式(可以使用VALUE語句)和一些示例行,並將其編輯到問題中。 – Joe

回答

0

您的代碼使用用戶定義的格式,$G_14_PROD. - $G_16_PROD.。我的猜測是一個或多個問題會出現問題,但除非您能提供格式定義,否則將很難爲您提供進一步的幫助。

嘗試運行以下和分享所產生的輸出數據集work.prdfmts

proc sql noprint; 
    select cats(libname,'.',memname) into :myfmtlib 
    from sashelp.vcatalg 
    where objname = 'G_14_PROD'; 
quit; 

proc format cntlout = prdfmts library=&myfmtlib; 
    select G_14_PROD G_15_PROD G_16_PROD; 
run; 

注:這假設您只有一個包含具有該名稱格式的目錄,並且所有3種格式的格式定義都包含在同一個目錄中。如果沒有,您需要適應這一點,併爲每種格式運行一次以查找和導出定義。

0

不是說它解決了您的實際問題,而是您可以通過使用PUTC()函數來取消IF/THEN函數。

data have ; 
    do year=2014,2015,2016; 
    do lookup='00_01','00_02' ; 
     output; 
    end; 
    end; 
run; 

proc format ; 
value $G_14_PROD '0001'='2014 - 1' '0002'='2014 - 2' ; 
value $G_15_PROD '0001'='2015 - 1' '0002'='2015 - 2' ; 
value $G_16_PROD '0001'='2016 - 1' '0002'='2016 - 2' ; 
run; 

data want ; 
    set have ; 
    length test $35 ; 
    if 2014 <= year <= 2016 then 
    test = putc(compress(lookup,'_'),cats('$G_',year-2000,'_PROD.')) 
    ; 
run; 

結果

Obs year lookup  test 
1  2014 00_01  2014 - 1 
2  2014 00_02  2014 - 2 
3  2015 00_01  2015 - 1 
4  2015 00_02  2015 - 2 
5  2016 00_01  2016 - 1 
6  2016 00_02  2016 - 2 
相關問題