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

标签 sql sorting variables sas

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

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

我在想 SQL 应该是这样的:

Select mtr*, date* from Table

Select mtr%, date% from Table

最佳答案

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

这是一个从自动 SAS View 中检索列名称的解决方案,该 View 包含有关 session 的元数据(按字母顺序排列)到单个宏变量中,您稍后可以在代码中使用该变量:

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;

关于sql - 按前缀/起始字母对表变量进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4548939/

相关文章:

sql - 获取查询中的连续日期

python - Django 事务锁定表

java - 如何从结果查询中插入查询以在java netbeans上插入查询?

Android:按列对表格布局内容进行排序

python - 按字母顺序对 Tkinter 选项菜单进行排序?

Python、SQLAlchemy 在 connection.execute 中传递参数

arrays - 如何在 $C$ 不相交的排序数组的并集中找到第 $k$ 最小的项目?

javascript - Javascript 的 "document"对象可以用作变量吗?

javascript - 是否可以使用一个变量的值来定义 JavaScript 字符串中另一个变量的名称?

php - 如何在 sql 查询中插入 php 变量?