我定义了两种不同的格式。
proc format;
value fmtA
1 = 3
2 = 5
;
value fmtB
1 = 2
2 = 4
;
run;
function myfun
返回格式化值
proc fcmp outlib=WORK.pac.funcs;
function myfun(n);
val = put(n,fmta.);
return (val);
endsub;
run;
我想让它更具动态性 - val将基于函数输入。
修改
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
数据集中的格式名称之前,这是不可能的。
答案 0 :(得分:3)
只需使用PUTN()函数。
proc format;
value fmtA 1 = '3' 2 = '5' ;
value fmtB 1 = '2' 2 = '4' ;
value fmtc 1 = '1' 2 = '3' ;
run;
data test;
do myfmt = 'fmtA.','fmtB.','fmtC.';
do n= 1,2;
str = putn(n,myfmt);
value = input(str,32.);
output;
end;
end;
run;