按前缀/起始字母对表变量进行排序

时间:2010-12-28 19:44:50

标签: sql sorting variables sas

这适用于SAS表,因此SQL命令也可以使用。

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

我认为SQL会有以下几点:

Select mtr*, date* from Table

Select mtr%, date% from Table

1 个答案:

答案 0 :(得分:7)

正如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;

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

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;