Sas 将格式名称用作proc fcmp中的函数输入
我定义了两种不同的格式Sas 将格式名称用作proc fcmp中的函数输入,sas,Sas,我定义了两种不同的格式 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将基于函数输入 编辑 proc fc
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将基于函数输入
编辑
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;
这个解决方案有效。然而,当我有这么多不同的格式时,它需要一个长长的检查列表。在我查看输入测试数据集中的格式名称之前是不可能的。只需使用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;
向函数中添加第二个参数在函数中添加case语句,以根据传递的参数获取所需格式,而不是使用as format获取类似于格式类型的字符串,并检查该字符串是否匹配任何格式,然后使用该格式。例如,fmtA和fmtB是可以传递的字符串。这些字符串与case语句中的字符串进行比较,如果其fmtA随后将put函数与fmtA一起添加。格式化为案例的语句。@SivaprasathV传递给函数的格式实际上基于现有的数据集列值。我不知道所有的格式名称,但我只需要将一个列值(应该是一种格式)传递给该函数。您能说明设置值格式的条件吗?n应该通过什么条件才能获得格式fmtA。还是口蹄疫?PUTN/PUTC允许第二个参数为变量。