在 sas eg
中,出于兼容性问题,我需要复制一个表,重命名其列以避免空格和破折号,并将名称设为大写。
这是我表格中的示例名称,实际上我还有更多:
- 'Call - Investments IN'
- 'E-mail - Campaign'
- 'E-mail - Investments OUT'
- 'Letter - Campaign'
我想去掉破折号和空格并使名称大写,这些将是我输出的列:
- 'CALL_INVESTMENTS_IN'
- 'E_MAIL_CAMPAIGN'
- 'E_MAIL_INVESTMENTS_OUT'
- 'LETTER_CAMPAIGN'
编辑:
明确地说,我的输入是一个表,我的输出应该是新表,我不想键入或复制粘贴单个列名,我希望对所有列名进行操作(我可能不得不在从外部来源收到的许多表的许多列上使用它)。
我应该使用什么 sql 查询(或 sas 宏)?
最佳答案
只需使用 RENAME 语句或 RENAME= 数据集选项。如果列表不太长,您可以轻松地将所需的 old=new
对生成到宏变量中。为确保您可以更改大小写,最好使用数据集选项,因为之前只有一个问题表明 RENAME upper=UPPER 在 DATA 步骤中不执行任何操作,因为 SAS 根据名称的首次显示方式设置名称的大小写。
proc contents data=have noprint out=contents ; run;
proc sql noprint;
select catx('=',nliteral(name),upcase(translate(trim(name),'__','- ')))
into :rename separated by ' '
from contents
;
quit;
data want ;
set have (rename=(&rename)) ;
run;
关于sql - 用下划线替换破折号和空格,并使列名大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46465350/