使用格式名称作为proc fcmp中的函数输入

时间:2017-04-18 09:08:58

标签: sas

我定义了两种不同的格式。

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数据集中的格式名称之前,这是不可能的。

1 个答案:

答案 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;