2013-08-28 62 views
1

不知道你能不能帮我使用字段值作为SAS变量

我有一个数据集,其中在一列中的值也列的字段名。我希望能够使用列的值来调用公式中的适用字段。

例如...我有列...

MERCH_NO 
V01 
M02 
V08 
M08 
AMOUNT 
PLAN 

的记录是这样的......和我想要的计算领域做...

MERCH_NO  V01 M02 V08 M08 AMOUNT PLAN CALC 
123456  2  2 1 1 100.00 V01  value of V01 * AMOUNT 
456789  4  4 4 4 250.00 M08  value of M08 * AMOUNT 

如果一对计划场记录说V01,那么V01列的值必须用在CALC字段中。如果字段说M08,那么应该使用值为M08值。有大约40个计划。

回答

1

如何使用VVALUEX()函数的静态示例。

data result; 
V01 = 2; 
AMOUNT=100; 
CALC = 'value of V01 * AMOUNT'; 
length arg1 arg2 $32; 
arg1 = scan(compress(CALC, 'value of'), 1); 
arg2 = scan(compress(CALC, 'value of'), 2); 
put arg1 arg2; 
result = input(VVALUEX(arg1), 16.) * input(VVALUEX(arg2), 16.); 
run; 

对于你的情况,你必须创建逻辑来认识都知道的变量CALC,类型patters和格式(自VVALUEX()返回格式化值)。

一个动态的方法,但可能不适合大量的数据是为每行生成代码(见下文)。 目前假设一个简单的表达式可用于IF .. THEN

data input; 
length CALC $50; 
input V01 M08 AMOUNT CALC 9-58; 
cards; 
2 1 100 value of V01 * AMOUNT 
2 4 100 value of M08 * AMOUNT 
; 
run; 

/* code generation */ 
data _null_; 
file 'mycalc.sas'; 
set input end=last; 

length line $150; 
if _N_=1 then do; 
    put 'data result;'; 
    put ' set input;'; 
end; 
line = 'if _N_ = ' || put(_N_, 8. -L) || 
     ' then RESULT = ' || compress(CALC, 'value of') || ';'; 
put line; 
if last then put 'run;'; 
run; 

%include 'mycalc.sas'; /* run the code */ 

好了,现在如果看到我没注意到你关于PLAN场注 - 请调整你所需要的。

0

Vasja的方法是正确的 - 这里就是使用PLAN变量的方法。

data have; 
input MERCH_NO  V01 M02 V08 M08 AMOUNT PLAN $; 
calc = input(vvaluex(plan),best12.) * amount; 
put calc=; 
datalines; 
123456  2  2 1 1 100.00 V01  
456789  4  4 4 4 250.00 M08  
;;;; 
run; 
+0

你们真是太棒了!!!!!我得到了VVALUEX,但无法弄清楚如何应用它。 – Samuel