【问题标题】:Dynamically create new variable in SAS dataset using an existing variable使用现有变量在 SAS 数据集中动态创建新变量
【发布时间】:2014-08-05 09:41:26
【问题描述】:

我有一个 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

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

【问题讨论】:

    标签: variables macros sas dataset datastep


    【解决方案1】:

    如果你想要宏:

    %macro out(i); var_&i %mend out;
    data t2;
      set t1;
      call symput('index', index);
      var_out=%out(&index);
    run;
    

    【讨论】:

      【解决方案2】:

      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】:

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

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

        【讨论】:

          【解决方案4】:

          你会使用一个数组。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-03-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多