【问题标题】:Why does my code inside my macro is not taken into account?为什么我的宏中的代码没有被考虑在内?
【发布时间】:2018-04-11 11:59:00
【问题描述】:

我正在尝试在 SAS 上编写一个能够创建 1500 人的 50 个不同样本的宏。但是一旦我输入%macro,以下所有代码都没有被正确考虑(PROC SURVEYSELECTDATARUN...不再有任何颜色)。你会在我的代码下面找到,你能看看吗?

%macro loop(50);
%do i=1 %to 50;
    PROC SURVEYSELECT DATA=WORK.TOP_1()
        METHOD=SRS
        OUT= WORK.ALEA_1
        N=1500;
    RUN;
%end;
%mend;
%loop(50);

【问题讨论】:

  • 为什么是 标签?
  • 我不明白这个问题。你的意思是编辑器没有像你期望的那样高亮代码还是代码没有像你期望的那样执行?
  • 去掉宏语句中的(50)。然后你可以像%loop这样调用宏。

标签: sas sas-macro


【解决方案1】:

这只是增强编辑器窗口的常见行为。

您应该会发现,当您调用宏时,代码运行正常,但在宏定义中并未应用高亮显示。

一种解决方法是在宏定义的开头,%macro 语句之后的行中添加以下内容:

%local DUMMY;
%let DUMMY = %nrstr(%mend);

这会诱使编辑器认为它已经到达宏定义的末尾,而实际上对宏内部的代码没有任何影响,从而导致高亮恢复。

【讨论】:

  • 有趣的方法。我建议用%* fix EG syntax highlighting ; 对其进行评论,这样其他人就会知道代码的原因。
【解决方案2】:

您不需要宏。如果您想要 50 个样本,请使用 SURVEYSELECT 选项 REPS=50。

【讨论】:

  • 谢谢,真的很方便!
猜你喜欢
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
相关资源
最近更新 更多