Sas 基于其他列中的观察值创建新列
我在使用条件创建新变量时遇到问题,我尝试了数据步骤,但没有成功 我的数据集现在看起来像这样:Sas 基于其他列中的观察值创建新列,sas,proc-sql,Sas,Proc Sql,我在使用条件创建新变量时遇到问题,我尝试了数据步骤,但没有成功 我的数据集现在看起来像这样: 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。然后,如果a&b&c&d&e中存在1,但它没有为我这样做,则删除观察值,可能是因为缺少值 到目前为止我使用的代码: data campZ; se
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。然后,如果a&b&c&d&e中存在1,但它没有为我这样做,则删除观察值,可能是因为缺少值
到目前为止我使用的代码:
data campZ;
set campY;
select;
when (sum(Macroscopic -- Symbolic > 1)) Random = 1;
otherwise; end;
run;
我也尝试过procsql,但我主要关注数据步骤,但任何帮助都会很好
谢谢大家!
意志
抱歉,如果我有任何语法错误,我的SAS SQL有点生疏。您可以执行查询来执行此操作。虽然我认为数据步骤是相当合理的。下面是在procsql中执行上述操作的一种方法
这只是返回值。如果要将它们放入新的数据集中,请使用“创建表为”。看起来您既要设置R,又要清除其他变量。将变量列表用作函数的参数时,需要添加OF关键字
data campZ;
set campY;
if sum(of Macroscopic -- Symbolic) > 1 then do;
Random = 1;
call missing(of Macroscopic -- Symbolic);
end;
run;
数据a;
输入一个B C D E;
卡;
1.1 1 .
. 1.
1.1.1.
;
proc-sql-noprint;
将表a1创建为
选择*,大小写
当suma,b,c,d,e>1时,则为1
当suma,b,c,d,eThanks这么多的时候,这真是太棒了!你能解释一下campz的观点吗;表示?表达式campz z将别名z指定给compz。表别名是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 ;
data campZ;
set campY;
if sum(of Macroscopic -- Symbolic) > 1 then do;
Random = 1;
call missing(of Macroscopic -- Symbolic);
end;
run;