2016-11-17 14 views
-1

ユーザ定義フォーマットの観測値に新しい値を定義しようとしています。しかし、私のif/then/elseステートメントは、年値 "2014"の観測値に対してのみ機能するようです。 putステートメントは他の値では機能しません。 SASでは、putステートメントは最初のステートメントでは青で、他のステートメントでは黒です。ここで私が言いたいの絵です:ユーザ定義フォーマットのput関数を使用して条件付きで新しいフィールドを定義する

enter image description here

誰もが私がここで行方不明です何を知っていますか?

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年らしいことを言うとき、私が何を意味するかの例です。ここに私の完全なコードです年の値は2014で、フォーマットの検索は正しく機能し、テストフィールドは私が期待している値を返します。ただし、2015年と2016年の間、テストフィールドはフォーマットを行わずにルックアップ値を返します。

+0

'それは上記のように、コードかどうPUT'は青色であってはならない - それはとにかく、鉱山ではありません。まだ青色であることを確認できますか?もしそうなら、あなたはコードを適切に転記していないか、あるいはあなたのコードの中で他の問題を以前に持っています(このデータステップだけをとり、新しいウィンドウを入れてみてください)。 – Joe

+0

明確にするために、それが '文'の場合は青色で、 '関数'の場合は黒色です。 'put'は両方のものなので、それを理解するのは構文パーサに任されています。もしあなたが青色であれば 'statement'を使っていると思います。つまり' test = '部分はおそらく見えません。 – Joe

+1

最後に、「働く」という意味を説明する必要があります。あなたは2014年の値を取得しますが、他の2つの値は取得しません。あるいは、3年間で2014形式の価値が得られますか?作成されたデータを使ってここにいくつかの例を入れることは非常に役に立ちます - いくつかのフォーマット(VALUEステートメントを使用することができます)といくつかの行の例を作り、それを質問に編集してください。 – Joe

答えて

0

お客様のコードでは、ユーザー定義のフォーマット$G_14_PROD.-$G_16_PROD.を使用しています。私の推測では、これらのうちの1つ以上に問題があると思われますが、フォーマット定義を提供できないと、それ以上のサポートは困難になります。

以下、得られる出力データセット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; 

N.B.これは、その名前のフォーマットを含むカタログが1つしかなく、3つのフォーマットすべてのフォーマット定義が同じカタログに含まれていることを前提としています。そうでなければ、これを少しばかり適応させて、フォーマットごとに1回実行して定義を見つけてエクスポートする必要があります。

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 
関連する問題