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;