【问题标题】:SAS proc import column name has dollar sign $SAS proc 导入列名具有美元符号 $
【发布时间】:2018-07-22 05:04:59
【问题描述】:

我正在导入一个带有列标题的文件,其中包含一个带有 proc 导入的 $ 符号(例如“Sales $”)。导入的结果似乎将该列重命名为“VAR11”。

proc import out = raw
    datafile="example.xlsx" 
    dbms=xlsx replace;
    range = "Sheet1$A1:B50";
    getnames = yes;
run;

有没有办法仍然读取列名,但只需去掉 $ 符号,使其成为有意义的标题?

【问题讨论】:

  • 在导入前试试这个:option VALIDVARNAME=ANY;
  • 如果它只是一列,您可以使用 out =raw(rename=(var11=newvar)) 重命名
  • 不幸的是,@Kiran,这种类型的 var 名称出现了 50 次,因此很难一一重命名。谢谢你的想法!
  • @pinegulf,这行得通!我只需要引用 var 名称 'Sales $'n (请参阅 SAS 名称文字)
  • 我建议你不要那样做。标签仍然存在美元符号,但是用引号和 $ 输入变量名会很快变得无聊。您可以将标签用于报告和演示文稿,而不是变量名称。

标签: import sas dollar-sign


【解决方案1】:

如果唯一的问题名称采用该格式,那么您应该能够阅读它,然后使用标签重命名变量。因此,将名称和标签放入数据集中。您可以查询字典表,使用 proc 内容,也可以使用 PROC TRANSPOSE。

proc transpose data=raw (obs=0) out=names ;
  var _all_ ;
run;

现在将 oldname=newname 对组成一个宏变量列表。

proc sql noprint ;
  select catx('=',_name_,translate(trim(compress(_label_,'$')),'_',' '))
    into :renames separated by ' '
  from names
  where upcase(_name_) ne upcase(substrn(_label_,1,32))
  ;
quit;

然后您可以在 RENAME 语句或 RENAME= 数据集选项中使用它。

data renamed;
  set raw(rename=(&renames)) ;
run;

【讨论】:

  • 这是个好办法。但是我已经尝试过使用包含多个“_”的变量名的代码,它只删除了其中一个。 Like a label = "Name $ good" 变成 "Name__good"
  • 您可以在调用translate() 之前添加对compbl() 的调用,以便将多个空格减少为一个空格。
  • 对不起,它们不是重复的空格,而是重复一次两次的符号“_”。比如变量名是Name____good,如何修改为Name_good?
  • @D.O.所以名称以Name_$_good 开头,而不是您最初所说的Name $ good?如果是这样,那么您将需要更复杂的逻辑来替换多个下划线。正则表达式可以做到。用空格替换下划线,使用 compbl(),然后将空格转换回下划线也可以。
猜你喜欢
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多