【问题标题】:Keep only variables specified in separate list of variable names仅保留在单独的变量名称列表中指定的变量
【发布时间】:2013-06-15 05:04:47
【问题描述】:

我有一个数据集,其中有一列包含 45 个变量的列表 - 它被称为“输出”。 在另一个数据集中,我有 200 个变量的时间序列数据。第一行顶部的变量名称和整个时间的值都在列中。因此,例如,对于变量的名称,我将失业放在首位,而在此之下的整个时间段内的失业值。 GDP 等也是如此 - 此数据集称为“全部”。

我喜欢从数据集“out”中调用 45 个 cariables,并从“All”中创建一个较小的表,其中只有这 45 个变量。

我使用了proc sql; create table TABLE,但我不确定如何完成代码。我的想法是定义一个列表并将该列表引入 proc sql 以制作更小的表,但是我无法让它工作。

如果有人可以提供帮助,我将不胜感激。 谢谢,SE

【问题讨论】:

    标签: merge dataset sas proc-sql


    【解决方案1】:

    这是一个非常简单的 proc sql 解决方案。

    proc sql noprint;
    select col_name into :vars separated by ' ,'
    from output;
    quit;
    
    proc sql;
    create table want as select &vars.
    from all;
    quit;
    

    【讨论】:

      【解决方案2】:

      一种选择是将变量列表连接成一个宏变量,并使用它来保留您想要的内容。这就是我的想法:

      data output;
          Input VariableName $;
          datalines;
          One
          Two
          Three
      Run;
      
      data a; *_NULL_;
          Retain VariableList;
          Length VariableList $1000;
          Set Output end=end;
          VariableList = Catx(" ", VariableList, VariableName) ;
          If End Then Call Symput('MyVariableList', VariableList);
      run;
      
      %put &MyVariableList;
      
      data Want;
          Set All;
          Keep &MyVariableList ;
      run;
      

      【讨论】:

        【解决方案3】:

        您可以在第二个数据集中使用 proc transpose,因为您没有提供太多数据,我可以提供一个简单示例来说明您如何使用该语句,请参阅此documentation 了解更多信息。

        proc transpose data=work.narrow_file1
        out=work.narrow_file1_transp_prefix
        prefix=pet_count;
        run;
        

        【讨论】:

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