我有一个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
如果需要,我有什么方法可以使用宏变量吗?
答案 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;
}