我在使用条件创建新变量时遇到问题,我已尝试过数据步骤,但无济于事。
我的数据集现在看起来像这样:
A B C D E
1 . 1 1 .
. 1 . . .
1 . 1 . 1
我需要看起来像这样
A B C D E R
. . . . 1
. 1 . . . .
. . . . . 1
所以我使用的想法是,如果a-d的总和大于1,则将R设置为等于1。如果在& amp;和/或b& c& d&但它不是为我做的,也许是由于缺少价值。
到目前为止我已使用的代码:data campZ;
set campY;
select;
when (sum(Macroscopic -- Symbolic > 1)) Random = 1;
otherwise; end;
run;
我也尝试过Proc SQL,但我一直专注于数据步骤,但任何帮助都会很棒。
谢谢!
将
答案 0 :(得分:2)
看起来你想要既设置R又清除其他变量。使用变量列表作为函数的参数时,需要添加OF
关键字。
data campZ;
set campY;
if sum(of Macroscopic -- Symbolic) > 1 then do;
Random = 1;
call missing(of Macroscopic -- Symbolic);
end;
run;
答案 1 :(得分:0)
SELECT A, B, C, D, E,
CASE WHEN A+B+C+D > 1 THEN 1 END AS R
FROM Table;
(道歉,如果我做了任何语法滑动,我的SAS SQL有点生疏。)
答案 2 :(得分:0)
您可以执行查询来执行此操作。 。 。虽然我认为数据步骤非常合理。以下是在proc sql
中执行上述操作的一种方法。
proc sql
select (case when cnt <= 1 then a end) as a,
(case when cnt <= 1 then b end) as b,
(case when cnt <= 1 then c end) as c,
(case when cnt <= 1 then d end) as d,
(case when cnt <= 1 then e end) as e,
(case when cnt > 1 then 1 end) as r
from (select z.*,
((case when a is null then 0 else 1 end) +
(case when b is null then 0 else 1 end) +
(case when c is null then 0 else 1 end) +
(case when d is null then 0 else 1 end) +
(case when e is null then 0 else 1 end)
) as cnt
from campz z
) z ;
这只返回值。如果您想在新数据集中使用它们,请使用create table as
。
答案 3 :(得分:0)
数据a;
输入A B C D E;
卡;
1。 1 1
。 1。 。 。
1。 1。 1
;
proc sql noprint;
将表a1创建为
选择*,案例
当sum(a,b,c,d,e)> 1然后1
当sum(a,b,c,d,e)&lt; = 1时。
从a结束为R;
更新a1集A =。,B =。,C =。,D =。,E =。
其中R = 1;
退出;
Obs A B C D E R
1。 。 。 。 。 1
2。 1。 。 。 。
3。 。 。 。 。 1个