1
2つの異なるフォーマットが定義されています。フォーマットされたフォーマット名を関数の入力として使用します。fcmp
proc format;
value fmtA
1 = 3
2 = 5
;
value fmtB
1 = 2
2 = 4
;
run;
機能myfun
戻り、私はこれは少しよりダイナミックにしたい値
proc fcmp outlib=WORK.pac.funcs;
function myfun(n);
val = put(n,fmta.);
return (val);
endsub;
run;
- valは関数の入力に基づいて行われます。
EDIT
proc fcmp outlib=WORK.pac.funcs;
function myfun(n,myfmt $);
if myfmt = 'fmtA' then val = put(n,fmtA.);
else if myfmt = 'fmtB' then val = put(n,fmtB.);
else val = n;
return (val);
endsub;
run;
data test;
n = 2;
myfmt = 'fmtA';
output;
myfmt = 'fmtB';
output;
myfmt = 'fmtC';
output;
run;
data test2;
set test;
/* try to do sth like this */
value = myfun(n,myfmt);
run;
このソリューションは、動作します。しかし、それは私が非常に多くの異なるフォーマットを持っているときにチェックの長いリストが必要です。そして、私が入力test
データセットの形式名を見る前に、それは不可能です。
フォーマットタイプに似た文字列を取得し、文字列がいずれかと一致するかどうかを確認する代わりに、フォーマットとして使用するのでは –
を渡されたパラメータに基づいて必要な形式を取得するために、関数内でcase文を追加機能に2つ目のパラメータを追加フォーマットを使用して、フォーマットを使用します。たとえば、fmtAとfmtBは渡すことができる文字列です。 fmtAがfmtAでput関数を追加すると、これらの文字列がcaseステートメントの文字列と比較されます。 caseのステートメントとしてformatを使用します。 –
@SivaprasathV関数に渡される形式は、実際には既存のデータセット列の値に基づいています。私はすべての書式名を知っているわけではありませんが、その関数には列の値(書式になっているはずです)を渡すだけです。 – Lovnlust