SAS列名替换方案
我有一个使用SAS列名替换方案,sas,pass-through,Sas,Pass Through,我有一个使用proc sql(下面摘录)的直通查询,其中一些结果名称被修改,因为它们不是有效的SAS名称1A替换为\u A,2A替换为\u A0,并进行了一些其他更改。我的问题是: 是否有文件解释名称替换规则,例如2A变为\u A0 我可以改变SAS更正姓名的方式吗?例如,我是否可以将1A改为\u 1A,而不是\u A 你不能改变算法,我也不确定它是否已经发布。但是您可以自己在Oracle端重命名该列 select * from connection to oracle (select "
proc sql
(下面摘录)的直通查询,其中一些结果名称被修改,因为它们不是有效的SAS名称<代码>1A替换为\u A
,2A
替换为\u A0
,并进行了一些其他更改。我的问题是:
- 是否有文件解释名称替换规则,例如
变为2A
\u A0
- 我可以改变SAS更正姓名的方式吗?例如,我是否可以将
改为1A
,而不是\u 1A
\u A
你不能改变算法,我也不确定它是否已经发布。但是您可以自己在Oracle端重命名该列
select * from connection to oracle (select "1A" as "_1A", ...);
或者在SAS端重命名。SAS将原始名称存储为变量的标签。您可以查询元数据并使用元数据重命名变量
proc contents data=bk_ald noprint out=contents; run;
proc sql noprint ;
select catx(name,'=',cats('_',label)) into :rename separated by ' '
from contents
where upcase(name) ne upcase(label)
;
quit;
data want ;
set bk_ald;
rename &rename ;
run;
你有没有检查过BK_ALD中的标签是否与Oracle中的原始列名匹配?@Tom我刚才没有,但是是的,结果证明标签是Oracle的原始名称。选项validvarname=any代码>在这种情况下有什么不同吗?使用validname=any应该意味着不重命名变量。但您需要使用名称文字来引用它们<代码>“1A”n。如果仍然需要像上面那样发出rename语句,那么应该向select语句添加
NLITERAL()
函数调用,以便它生成有效的变量引用。
proc contents data=bk_ald noprint out=contents; run;
proc sql noprint ;
select catx(name,'=',cats('_',label)) into :rename separated by ' '
from contents
where upcase(name) ne upcase(label)
;
quit;
data want ;
set bk_ald;
rename &rename ;
run;