【发布时间】:2021-07-19 14:37:53
【问题描述】:
我对 sas 宏和宏变量有疑问。当我使用它时,我得到信息:'在 %eval 函数中找到字符操作数或 %if 条件是数字。
我有类似分布 (d1-d5) 的东西,我想获得类似的变量,但偏移了 diff(diff 之前的数据等于 0)。下面的示例表 - 当然我需要为更大的表做点什么。
Example_table
Name d1 d2 d3 d4 d5 diff
A 0.2 0.2 0.1 0.2 0.3 1
B 0.3 0.1 0.4 0.3 0 2
C 0.1 0.2 0 0.4 0.3 2
Table I want to get: (new_table)
Name n1 n2 n3 n4 n5 diff
A 0 0.2 0.2 0.1 0.2 1
B 0 0 0.3 0.1 0.4 2
C 0 0 0.1 0.2 0 2
Data example_table;
Name = A B C;
d1 = 0.2 0.3 0.1;
d2 = 0.2 0.1 0.2;
d3 = 0.1 0.4 0;
d4 = 0.2 0.3 0.4;
d5 = 0.3 0 0.3;
diff = 1 2 2;
run;
%macro distr ();
%local i;
%do i = 1 %to 5;
if &i. <= diff then n&i. = 0;
else n&i. = d%eval(&i. - diff);
/* I cant compute this eval, it looks like diff is character variable..., but it doesn't */
%end;
%mend;
Data new_table;
Set example_table;
%distr();
run;
【问题讨论】:
-
注意事项 - 请查看 Tom 是如何创建您的示例数据集的,未来的问题应该包含它。