Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS列名替换方案_Sas_Pass Through - Fatal编程技术网

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;