Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS宏do循环与数据步_Sas - Fatal编程技术网

SAS宏do循环与数据步

SAS宏do循环与数据步,sas,Sas,这是我的第一个宏,如果我错过了一些简单的东西,我深表歉意 我需要将相同的数据步骤执行六次(或更多次),并将每个步骤附加到第一步,因此我尝试在宏中执行do循环。删除循环后一切都正常,但一旦添加了do循环,就会出现错误,要么说我有一个额外的%end,要么说我有一个额外的%mend。欢迎大家提出意见。谢谢 %macro freeze_samples(orig_file=, samples= , Start_Freeze_Incr=, End_Freeze_Incr= ); %d

这是我的第一个宏,如果我错过了一些简单的东西,我深表歉意

我需要将相同的数据步骤执行六次(或更多次),并将每个步骤附加到第一步,因此我尝试在宏中执行do循环。删除循环后一切都正常,但一旦添加了do循环,就会出现错误,要么说我有一个额外的%end,要么说我有一个额外的%mend。欢迎大家提出意见。谢谢

%macro freeze_samples(orig_file=, samples= , Start_Freeze_Incr=, 
           End_Freeze_Incr= );
%do i = 1 %to &samples;

data freeze_slice_&i;  
    set &orig_file;

     (do stuff)

run;

    * If we have more than one slice, append to previous slice(s).;
    %if &i > 1 %then %do;
        proc append base = temp_1 data = temp_&i;
        run;
    %end;

%end;

%mend;

我认为你可能有一个没有包含在文本中的问题(例如,在“做事情”部分中),或者你的会话很糟糕(例如,你解决了问题,但是之前的运行中出现了一些问题,现在却把事情搞砸了)。这运行正常(考虑到我不知道你在做什么):


我想指出的是,你最好不要以这种方式做任何事情;在SAS中,通常有一种比将数据拆分为多个数据集更好的方法。但是,由于我不知道你在做什么,除了推荐阅读并牢记在心之外,我真的无法提出更好的建议(即使你在做一些与自举不同的事情,这个概念几乎适用于SAS中的所有内容)。

我想你可能有一个问题没有包含在文本中(即“做事情”部分)或者你有一个糟糕的会话(即,你修复了问题,但是上一次运行中出现了一些问题,现在却把事情搞砸了)。这运行正常(考虑到我不知道你在做什么):


我想指出的是,你最好不要以这种方式做任何事情;在SAS中,通常有一种比将数据拆分为多个数据集更好的方法。但是,由于我不知道您在做什么,除了推荐阅读并牢记阅读之外,我真的无法提出更好的建议(即使您正在做一些与自举不同的事情,这个概念几乎适用于SAS中的所有内容)。

感谢您的帮助。在我做的所有谷歌搜索中,我都没有找到那篇文章。通过选择某个范围内的随机日期,然后记录哪些研究样本在随机选择的日期后冻结在某个日期范围内,丢失的代码从当前数据中提取样本。Joe,你是对的-在我重新启动SAS后,代码就起作用了。谢谢你们的帮助。在我做的所有谷歌搜索中,我都没有找到那篇文章。通过选择某个范围内的随机日期,然后记录哪些研究样本在随机选择的日期后冻结在某个日期范围内,丢失的代码从当前数据中提取样本。Joe,你是对的-在我重新启动SAS后,代码就起作用了。这是一个可以通过重新启动SAS会话来解决的非问题。这是一个可以通过重新启动SAS会话来解决的非问题。
%macro freeze_samples(orig_file=, samples= , Start_Freeze_Incr=, 
           End_Freeze_Incr= );
%do i = 1 %to &samples;

data freeze_slice_&i;  
    set &orig_file;

     *(do stuff);

run;

    * If we have more than one slice, append to previous slice(s).;
    %if &i > 1 %then %do;
        proc append base = freeze_slice_1 data = freeze_slice_&i;  
        run;
    %end;

%end;

%mend;

%freeze_samples(orig_file=sashelp.class,samples=2,start_freeze_incr=1,end_freeze_incr=5);