【问题标题】:Using numeric column names in SAS在 SAS 中使用数字列名
【发布时间】:2016-07-26 20:57:35
【问题描述】:

我正在尝试将数值变量传递给这个宏。我可以通过 KEEP 和 SET 语句传递它,但是当它到达 RENAME 语句时,我得到了这些错误:

错误:变量 '2013'n 不在 WORK.'2013'n 文件中。

错误:文件 WORK.'2013'n 上的 DROP、KEEP 或 RENAME 选项无效。

%macro step2(year,cwyear);
    TITLE; FOOTNOTE;
    DATA WORK._EG_CFMT;
        LENGTH label $ 9;
        SET WORK."&year."n (KEEP="&year."n "&cwyear."n RENAME=("&year."n =start "&year."n =label)) END=__last;
        RETAIN fmtname "cw&year."n type "C";

        end=start;

              RUN;
    %mend step2;

当我更改 &year 周围的双引号时。到单引号,像这样:

SET WORK.'&year.'n (KEEP="&year."n "&cwyear."n RENAME=("&year."n =start "&year."n =label))

我收到此错误:

错误:文件 WORK.'&YEAR.'n.DATA 不存在。

当我改回所有双引号并删除 n 时,我收到以下错误:

错误 22-322:语法错误,需要以下之一:名称、带引号的字符串、;、CUROBS、END、INDSNAME、KEY、KEYRESET、KEYS、 NOBS、OPEN、POINT、DATALASTNULL

我该如何进行这项工作?

感谢您的帮助!

【问题讨论】:

  • 改成双引号时为什么要去掉n
  • 因为原始代码有双引号和 n 并抛出错误。我正在尝试测试与我已经知道不起作用的不同的东西。
  • 原来的错误信息只是说变量不存在。您确定您没有尝试通过标签而不是名称来引用变量吗?

标签: string sas literals


【解决方案1】:

你需要有双引号和 n。名称文字可以像任何其他字符串一样使用单引号或双引号。单引号不会解析其中的宏变量,双引号会。

例子:

options validvarname=any;
options validmemname=extend;

data '2015'n;
  '2015'n = 5;
run;

%macro do_something(year=);
  data work.want;
    set "&year."n(rename="&year."n = start);
  run;
%mend do_something;

%do_something(year=2015);

【讨论】:

  • 但这不是我在我的例子中所做的吗?
  • 以上是正确的(如,它有效)。如果您的示例完全相同,那么您需要进一步查看问题所在 - 也许变量没有按照您的想法命名。请注意options 语句 - 这些可能很重要。检查您没有_2015_015 而不是'2015'n
猜你喜欢
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多