在sas中同时向所有列追加文本

在sas中同时向所有列追加文本,sas,Sas,我有一个表,它的列从col1到col10。 我想在italy\u col10后面加上一个字符串,比如italy\u col1。 没有宏,我如何实现这一点。 因为我要连接多个表,所以我想为表1中的所有列和表2中的“美国”添加一个文本“意大利”。我试过下面的例子,它不符合我的要求 一种方法是生成宏变量,然后在代码中使用它们 首先从表1和表2中获取要重命名的变量列表 proc sql noprint; select catx('=',name,cats('Italy_',name) into :re

我有一个表,它的列从col1到col10。 我想在italy\u col10后面加上一个字符串,比如italy\u col1。 没有宏,我如何实现这一点。 因为我要连接多个表,所以我想为表1中的所有列和表2中的“美国”添加一个文本“意大利”。我试过下面的例子,它不符合我的要求


一种方法是生成宏变量,然后在代码中使用它们

首先从表1和表2中获取要重命名的变量列表

proc sql noprint;
select catx('=',name,cats('Italy_',name) into :rename1 separated by ' '
  from dictionary.columns 
  where libname="WORK" and memname="TABLE1" and upcase(name) ne 'ID'
;
select catx('=',name,cats('USA_',name) into :rename2 separated by ' '
  from dictionary.columns 
  where libname="WORK" and memname="TABLE2" and upcase(name) ne 'ID'
;
quit;
然后在合并数据集的代码中使用重命名对列表

data want;
   merge table1(rename=(&rename1)) table2(rename=(&rename2));
   by id;
run;
请注意,只有当要重命名的变量数量足够小,足以容纳单个宏变量时,此选项才起作用。如果列表更长,只需使用另一种方法(如数据步骤)来生成相同的代码


还要注意变量名太长。SAS对变量名的限制为32字节,因此添加4或7个额外字符可能会导致名称过长。您可能只是将其截断为32个字符,但这样可能会形成重复的名称。

请澄清。您正在尝试重命名变量吗?或者修改存储在变量中的数据?重命名变量名。请发布一个简单的输入数据集示例以及所需的输出。我假设您想重命名它们,以便可以合并数据集。演示如何组合数据集和简单示例输入所需的结果。还有一种模式可用于将源数据集的名称映射到重命名该数据集中的变量时要添加的前缀?链接代码不需要宏,但需要动态代码。通过使用类似于发布的文本中的查询来生成宏变量,您可以获得一些简单的动态代码,稍后可以使用这些宏变量来完成程序。展示你的努力。
data want;
   merge table1(rename=(&rename1)) table2(rename=(&rename2));
   by id;
run;