首页 > 解决方案 > Sas - 如何创建一个变量,其值为标志的名称等于 1

问题描述

我需要用 Sas 做以下事情。

我有一个这样的数据集;

ID   flg_1   flg_2   flg_3   ... flg_200
 1     0       1       0     ...   1
 2     1       0       0     ...   0
 3     0       0       1     ...   0
 4     1       1       1     ....  0
 .... 

我想创建一个标志名称等于 1 的新列。我的意思是:

ID   flg_1   flg_2   flg_3   ... flg_200   NEW_VAR
 1     0       1       0     ...   1      flg_2-flg_200
 2     1       0       0     ...   0      flg_1 
 3     0       0       1     ...   0      flg_3
 4     1       1       1     ....  0      flg_1-flg_2-flg_3
 ....  

你可以帮帮我吗?谢谢

标签: sas

解决方案


使用基于变量的数组来迭代标志并vname检索变量名称。

例子:

/* make sure the accumulator variable named 'flagged' is wide
 * enough accommodate the case of all variables being flagged.
 */

data want;
  set have;
  attrib flagged length=$1600 label='List of variables that were flagged';
  array flags flg_1-flg_200;
  do _n_ = 1 to dim(flags);
    if flags(_n_) then flagged = catx(',', flagged, vname(flags(_n_)));
  end;
run;

推荐阅读