【问题标题】:Sorting Table Variables by Prefix/Starting Letter按前缀/起始字母对表变量进行排序
【发布时间】:2010-12-28 19:44:50
【问题描述】:

这是针对 SAS 表的,因此 SQL 命令也可以使用。

我有一个包含 300 个变量的表;它们有 5 个不同的前缀,我想按这些前缀对它们进行排序。我希望它们按特定顺序(日期前缀之前的 mtr 前缀),但字母顺序是可以接受的。

我在想 SQL 会有类似的东西:

Select mtr*, date* from Table

Select mtr%, date% from Table

【问题讨论】:

    标签: sql sorting variables sas


    【解决方案1】:

    正如 gbn 所说,您需要获取列名并动态构建一些 sql(或数据步骤代码)。

    这是一个解决方案,它从自动 SAS 视图中检索列名称,该视图将有关会话的元数据(按字母顺序)保存到单个宏变量中,然后您可以稍后在代码中使用该变量:

    proc sql noprint;
      select name into :orderedVarNames separated by ','
      from sashelp.vcolumn
      where libname='WORK' and memname='YOUR_TABLE_NAME'
      order by name
      ;
    quit;
    

    (显然,您需要将引用的值替换为表的正确 libname 和表名。)然后您可以在另一个步骤中使用此宏变量,如下所示:

    proc sql;
      select &orderedVarNames
      from YOUR_TABLE_NAME
      ;
    quit;
    

    这里,“&orderedVarNames”被解析为列名列表。您可以通过将其输出到日志中来检查变量中的内容:%put &orderedVarNames;

    还有其他方法可以执行您的想法,但这可能是最快的,并且适用于任何桌子。如果您打算在数据步骤中将这种技术用于变量列表,请将分隔符更改为 separated by ' '

    一旦掌握了这一点,您就可以通过生成多个宏变量并过滤您从 sashelp.vcolumn 检索的内容来定制解决方案以获得所需的确切顺序。像这样的:

    proc sql noprint;
      select name into :orderedMTRvars separated by ','
      from sashelp.vcolumn
      where libname='WORK' and memname='MYTABLE' and substr(name,1,3)='MTR'
      order by name
      ;
      select name into :orderedDATEvars separated by ','
      from sashelp.vcolumn
      where libname='WORK' and memname='MYTABLE' and substr(name,1,4)='DATE'
      order by name
      ;
      quit;
    
      proc sql;
        select &orderedMTRVars, &orderedDATEVars
        from MYTABLE
        ;
      quit;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 2015-07-06
      • 2011-08-29
      相关资源
      最近更新 更多