按列名重新排列列顺序

时间:2014-11-18 10:01:13

标签: sql sas proc

我有数据集如下;

data dataset;
input name $ mob5 mob1 mob3 x;
datalines;
a 1 3 5 7
b 2 4 6 8
c 3 5 7 9 
d 5 7 9 2
;

run;

我想选择字段名称和那些带有mob(UNKNOW列名称和列数包含mob)。我不知道如何使用retain我不知道有多少列列名包含mob。

proc sql;
    create table table1 as
    select *
    from dataset(keep=name mob:)
quit;

我想要的输出是

name mob1 mob3 mob5
a 3 5 1
b 4 6 2
c 5 7 3
d 7 9 5

1 个答案:

答案 0 :(得分:0)

您可以使用字典表(假设您的源数据集称为'数据集'并驻留在工作库中,如果没有,则更改WHERE子句,但请确保使用大写价值观):

PROC SQL;
  SELECT name INTO: mob_cols SEPARATED BY ','
  FROM dictionary.columns
  WHERE libname = 'WORK' and memname = 'DATASET' 
  AND upcase(name) LIKE 'MOB%'
  ORDER BY name;
QUIT;

此代码将所有'mob'列加载到一个宏变量中,按名称排序并用逗号分隔。

然后您可以在SELECT的{​​{1}}子句中使用此宏变量:

PROC SQL