SAS列名替换方案
SAS column name replacement scheme
我有一个使用 proc sql
的传递查询(下面摘录),其中一些结果名称被修改,因为它们不是有效的 SAS 名称。 1A
被 _A
取代, 2A
被 _A0
取代,还有一些其他的变化。我的问题是:
- 是否有文档解释名称替换的规则,例如
2A
变成 _A0
?
- 我可以更改 SAS 更正名称的方式吗?例如,我可以让
1A
变成 _1A
而不是 _A
吗?
.
proc sql;
connect to oracle as clc([omitted]);
CREATE table out.bk_ald as
SELECT *
FROM connection to bpm (
SELECT
, "1A"
, "1B"
, "1C"
, "1D"
, "1E"
, "2A"
, "2B"
, "2C"
...
您不能更改算法,我不确定它是否已发布。但是您可以自己在 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;
我有一个使用 proc sql
的传递查询(下面摘录),其中一些结果名称被修改,因为它们不是有效的 SAS 名称。 1A
被 _A
取代, 2A
被 _A0
取代,还有一些其他的变化。我的问题是:
- 是否有文档解释名称替换的规则,例如
2A
变成_A0
? - 我可以更改 SAS 更正名称的方式吗?例如,我可以让
1A
变成_1A
而不是_A
吗?
.
proc sql;
connect to oracle as clc([omitted]);
CREATE table out.bk_ald as
SELECT *
FROM connection to bpm (
SELECT
, "1A"
, "1B"
, "1C"
, "1D"
, "1E"
, "2A"
, "2B"
, "2C"
...
您不能更改算法,我不确定它是否已发布。但是您可以自己在 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;