sql - 用下划线替换破折号和空格,并使列名大写

标签 sql oracle sas

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/

相关文章:

mysql - 如何在此语句上创建条件 IF THEN?

java.sql.SQLData - Oracle 对象映射问题

sas - 如何将 SAS 数据集转换为数据步骤

sas - proc copy 和 data step 的性能差异

java - 是否有 Java 函数可以获取数据库中的整个列?

php - MYSQL 错误 1064 在 select 子句中

c# - ORACLE 数据提供程序未显示为选项

oracle - 调用具有一个变量和没有变量的重载存储过程

mysql - 无法使用 SAS ACCESS TO MYSQL 连接 MYSQL Server

sql - 按给定序列将二进制转换为十进制