1

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

4

2 回答 2

2

options validvarname=any;将允许您访问它们,甚至可能使用数据集 - 您可以将“非法”变量名括在"variable name"n(引号然后是 n 之后)中,以使 aname literal等效于变量名(如在 Oracle 中使用"variable name")。

如果你想让它们更容易使用,你可以做类似的事情

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;在连接到 RDBMS 之前尝试设置,因为如果您以这种方式设置(并且目前没有),SAS 可能会为您执行此操作(取决于具体情况)。

于 2013-10-21T16:46:18.747 回答
0

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

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

于 2013-10-23T12:31:53.373 回答