为什么我的宏中的代码没有被考虑在内?
Why does my code inside my macro is not taken into account?
我正在尝试在 SAS 上编写一个宏,该宏能够创建 1500 人的 50 个不同样本。但是我一输入%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);
这只是增强编辑器的通常行为 window。
您应该会发现,当您调用宏时,代码可以正常运行,但不会在宏定义中应用突出显示。
一种解决方法是在宏定义的开头添加以下内容,在 %macro
语句之后的行中:
%local DUMMY;
%let DUMMY = %nrstr(%mend);
这会诱使编辑器认为它已经到达宏定义的末尾,而实际上对宏内部的代码没有任何影响,从而导致突出显示被恢复。
您不需要宏。如果您想要 50 个样本,请使用 SURVEYSELECT 选项 REPS=50.
我正在尝试在 SAS 上编写一个宏,该宏能够创建 1500 人的 50 个不同样本。但是我一输入%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);
这只是增强编辑器的通常行为 window。
您应该会发现,当您调用宏时,代码可以正常运行,但不会在宏定义中应用突出显示。
一种解决方法是在宏定义的开头添加以下内容,在 %macro
语句之后的行中:
%local DUMMY;
%let DUMMY = %nrstr(%mend);
这会诱使编辑器认为它已经到达宏定义的末尾,而实际上对宏内部的代码没有任何影响,从而导致突出显示被恢复。
您不需要宏。如果您想要 50 个样本,请使用 SURVEYSELECT 选项 REPS=50.