Sas 为什么宏中的代码不被考虑?

Sas 为什么宏中的代码不被考虑?,sas,sas-macro,Sas,Sas Macro,我试图在SAS上编写一个宏,它能够创建50个不同的1500人样本。但是,一旦我输入%macro,以下所有代码都不会被正确考虑(PROC SURVEYSELECT,DATA,RUN…不再有任何颜色)。你可以在下面找到我的代码,你能看一下吗 %macro loop(50); %do i=1 %to 50; PROC SURVEYSELECT DATA=WORK.TOP_1() METHOD=SRS OUT= WORK.ALEA_1 N=1500

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

%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);

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

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

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

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

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

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

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

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

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

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

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

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

为什么要标记?我不明白这个问题。您的意思是编辑器没有按预期突出显示代码,还是代码没有按预期执行?请删除宏语句中的
(50)
。然后,您可以调用宏,如
%loop
。为什么要使用标记?我不明白这个问题。您的意思是编辑器没有按预期突出显示代码,还是代码没有按预期执行?请删除宏语句中的
(50)
。然后您可以调用宏,如
%loop
。谢谢,这非常方便!谢谢,那真的很方便!有趣的方法。我建议用
%*fix-EG语法突出显示对其进行注释这样其他人就会知道代码的原因。有趣的方法。我建议用
%*fix-EG语法突出显示对其进行注释这样其他人就会知道代码的原因。