首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果满足条件,则输出观察值

如果满足条件,则输出观察值
EN

Stack Overflow用户
提问于 2012-01-06 17:42:39
回答 1查看 171关注 0票数 0

这是我的数据集:姓名Mark Math1 Math2 Math3

代码语言:javascript
复制
Justin  AA1 1   0   1   
Justin  BB1 1   1   1   
Justin  BA1 0   1   0
Justin      BC2 0       0       1

下面是创建它的SAS代码

代码语言:javascript
复制
         DATA Student1;
         INPUT Name $  Mark $ Math1 Math2 Math3;
        DATALINES;
        Justin  AA1  1 0 1
        Justin  BB1  1 1 1
        Justin  BA1  0 1 0
        Justin  BC2  0 0 1
        ;

如果遇到1,我想评估Math1并输出它旁边的标记,但是因为这个位置是在Math1中使用的,所以不能在Math2中再次使用,即输出Justin对于Math1是AA1,对于Math2是BB1 (因为第一个是列中的位置),对于Math3是BC2,因为即使我们在与AA1和BB1相同的行上有一个1,这两个标记已经在var Math1和Math2中使用了。

这是输出数据集应该是什么样子

代码语言:javascript
复制
       data Student2;
       input name $ Math1 $ Math2 $ Math3 $;
        datalines;
       Justin AA1 BB1 BC2
       ;

我可以使用数组来做这件事吗?

EN

回答 1

Stack Overflow用户

发布于 2012-01-08 05:16:29

在这种情况下,数组可能不够。下面是一个使用IML的解决方案(有希望)(虽然看起来很笨重)。我推测您可能需要处理多个学生,因此使其适用于多个名字的情况。如果有任何错误,请注解。

代码语言:javascript
复制
  DATA Student1;
    INPUT Name $  Mark $ Math1 Math2 Math3;
      DATALINES;
        Justin  AA1  1 0 1
        Justin  BB1  1 1 1
        Justin  BA1  0 1 0
        Justin  BC2  0 0 1
        Wayne   AB1  1 0 1
        Wayne   BC1   0 0 1
        Wayne  BD2    0 1 0
        Wayne  BE3   1 1 1
        ;
  quit;

proc iml;
  use student1;
  read all var{name mark} into x;
  read all var{math1 math2 math3} into y;
z=j(nrow(y),ncol(y),'mon');
i=1;
   do j=2 to nrow(x);
     if x[j,1]^=x[j-1,1] | j=nrow(x) then do;
      if j=nrow(x) then j=j+1;
        do k=1 to 3;
          do l=i to j-1;
            if y[l,k]=1 then do;
             y[l,k:3]=0;
             y[l+1:j-1,k]=0;
             z[i:j-1,k]=x[l,2];
             end;
           end;
         end;
         i=j;
     end;
    end;
    colname={'math1', 'math2', 'math3'};
create new from z[colname=colname];
append from z;
quit;

data new;
merge student1(keep=name) new;
run;

proc sort data=new out=new nodupkey;
by name;
run;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8755921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档