使用现有变量在SAS数据集中动态创建新变量

时间:2014-06-15 10:52:51

标签: variables macros sas dataset datastep

我有一个SAS数据集:

+-------+-------+-------+-------+
| var_1 | var_2 | var_3 | index |
+-------+-------+-------+-------+
|     1 |    10 |   100 |     2 |
|     2 |    20 |   200 |     1 |
|     3 |    30 |   300 |     3 |
+-------+-------+-------+-------+

现在,我想在同一个数据集中创建一个新变量,每个行的值来自var_1,var_2和var_3之一,使用索引变量中的相应条目。

也就是说,如果我的输出变量是var_out,那么数据集将如下所示:

+-------+-------+-------+-------+---------+
| var_1 | var_2 | var_3 | index | var_out |
+-------+-------+-------+-------+---------+
|     1 |    10 |   100 |     2 |      10 |
|     2 |    20 |   200 |     1 |       2 |
|     3 |    30 |   300 |     3 |     300 |
+-------+-------+-------+-------+---------+

这里,index的第一个值是2,因此var_out取值为var_2,即10

如果需要,我有什么方法可以使用宏变量吗?

4 个答案:

答案 0 :(得分:5)

您将使用数组。

data want;
 set have;
 array vars var1-var3;
 var_out = vars[index];
run;

答案 1 :(得分:0)

这也可以通过使用函数来实现,例如:

data want;
  set have;
  var_out=input(scan(catx(',', of var1-var3),index),8.);
run;

答案 2 :(得分:0)

VVALUE和VVALUEX也是选项,但它们返回字符值而不是数字。

data have;
input var_1 var_2 var_3 index;
cards;
1 10 100 2
2 20 200 1
3 30 300 3
;
run;

data want;     
set have;
var_out=vvaluex("var_"|| put(index, 2. -l));
run;

http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002233818.htm

答案 3 :(得分:0)

如果你想要宏:

.container{
  height:auto;
  width:700px;
  background:#ff0;
  overflow: hidden;
    position: relative;
    display: table;
}
.l{
  width:200px;
  display: table-cell;
  background:#ccc;
}
.c{
  width:200px;
  display: table-cell;
  background:#ddd;
}
.r{
  width:200px;
  display: table-cell;
  background:#eee;
}