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允许第二个参数为变量。