如何使用 sas 有效地重命名变量
How to efficiently rename variables using sas
我得到了一个包含 100 个变量的 SAS 数据集 DATA
。不幸的是,这个数据集不包含每个变量的名称。它只是将变量命名为 VAR1
- Var100
。我有一个单独的文件,其中列出了每个变量的名称 Name
(每个单元格一个名称)。我不想一一重命名,所以下面的代码不是一个选项。
data lib.test (rename = (var1= truename1 var2 = truename2 ...) ;
set lib.test;
run;
根据 Reeze 的建议,我尝试实施以下解决方案
proc sql;
/* Write the individual rename assignments */
select strip(name) || " = " || substr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", varnum , 1)
/* Store them in a macro variable and separate them by spaces */
into :vars separated by " "
/* Use a sas dictionary table to find metadata about the dataset */
from sashelp.vcolumn
where libname = "LIB"
and memname = "TEST"
and 1 <= varnum <= 100;
quit;
proc datasets lib=lib nolist nodetails;
modify test;
rename &vars.;
quit;
现在,我不想使用 a、b、c、d ... 重命名我的变量,而是想使用数据集 Name
上的名称作为新名称。数据集 Name
如下所示(如果更容易使用,我可以转置它)。 Name
的顺序与数据集lib.test
中的变量序列相同。我如何更改上面的代码来实现此目的?
Name
name1
anc
sjsjd
mdmd
您可以将 NAME
数据集转换为同时具有旧名称和新名称,然后使用它来生成重命名对。
data name_pairs;
set name ;
old_name = cats('VAR',_n_);
run;
proc sql noprint ;
select catx('=',old_name,name)
into :vars separated by ' '
from name_pairs
;
quit;
然后您可以在重命名语句中使用宏变量 VARS
。
我得到了一个包含 100 个变量的 SAS 数据集 DATA
。不幸的是,这个数据集不包含每个变量的名称。它只是将变量命名为 VAR1
- Var100
。我有一个单独的文件,其中列出了每个变量的名称 Name
(每个单元格一个名称)。我不想一一重命名,所以下面的代码不是一个选项。
data lib.test (rename = (var1= truename1 var2 = truename2 ...) ;
set lib.test;
run;
根据 Reeze 的建议,我尝试实施以下解决方案 现在,我不想使用 a、b、c、d ... 重命名我的变量,而是想使用数据集 proc sql;
/* Write the individual rename assignments */
select strip(name) || " = " || substr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", varnum , 1)
/* Store them in a macro variable and separate them by spaces */
into :vars separated by " "
/* Use a sas dictionary table to find metadata about the dataset */
from sashelp.vcolumn
where libname = "LIB"
and memname = "TEST"
and 1 <= varnum <= 100;
quit;
proc datasets lib=lib nolist nodetails;
modify test;
rename &vars.;
quit;
Name
上的名称作为新名称。数据集 Name
如下所示(如果更容易使用,我可以转置它)。 Name
的顺序与数据集lib.test
中的变量序列相同。我如何更改上面的代码来实现此目的?Name
name1
anc
sjsjd
mdmd
您可以将 NAME
数据集转换为同时具有旧名称和新名称,然后使用它来生成重命名对。
data name_pairs;
set name ;
old_name = cats('VAR',_n_);
run;
proc sql noprint ;
select catx('=',old_name,name)
into :vars separated by ' '
from name_pairs
;
quit;
然后您可以在重命名语句中使用宏变量 VARS
。