2013-10-21 292 views
0

我有一些来自SAS数据集中的关系数据库的结果。所有变量名都以数字开头,所以我无法重命名或在数据步骤中访问它们。有没有什么方法可以重新命名它们或访问它们,而无需再次从RDBMS中获取数据?重命名变量名称以SAS中的数字开头

+0

[这](http://stackoverflow.com/questions/18282776/sas7bdat-with-spaces-in-var-names)是我问过一阵子的问题。答案将同样适用于您的问题。 – Jeff

+0

啊,我确实认为我回答了类似的问题 - 是的,基本上是同样的解决方案,而且是更彻底的答案;) – Joe

回答

0

乔给出的答案有一些有用的信息,但我实际上发现SAS有一个(有点自动的)方法来处理这个问题。当您从RDBMS查询数据时,SAS实际上会替换任何以第一个字符为下划线的数字开头的列名称。所以1994年第四季度成为_994Q4。因此,您可以简单地访问数据。

但是,SAS会将​​RDBMS的原始名称保留为变量标题,所以它将在表视图模式下显示为1994Q4(或其他)。

1

options validvarname=any;将允许您访问它们,甚至使用的数据集 - 您可以在"variable name"n附上一个“非法”变量名(行情再后来的N)做出name literal这相当于一个变量名称(如在Oracle中使用"variable name")。

如果你想使它们更容易使用,您连接到RDBMS之前,你可以这样做

proc sql; 
select catx(' ','rename',name,'=',cats('_',name,';')) into :renamelist separated by ' ' 
    from dictionary.columns 
    where libname='WORK' and memname='DATASETNAME'; *perhaps AND ANYDIGIT(substr(name,1,1)) as well; 
quit; 

proc datasets lib=work; 
modify datasetname; 
&renamelist; 
quit; 

你也可以尝试设置options validvarname=v7;,因为它有可能SAS会为你做这个(视情况),如果你有这样的设置(并且目前不)。