Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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
Loops 宏从现有程序中的数据表运行迭代_Loops_Macros_Sas - Fatal编程技术网

Loops 宏从现有程序中的数据表运行迭代

Loops 宏从现有程序中的数据表运行迭代,loops,macros,sas,Loops,Macros,Sas,我完全不熟悉SAS中的宏/do循环/数组,但我一直在努力了解它们。事情进展不顺利 我有一个数据集,有148176行,9列。我想通过我的程序一个接一个地运行所有148176个组合(所以每一行都是一个接一个),并让它将每个结果作为一个长列表输出。最后我应该有148176个值 在使用宏块之前,我只使用了宏变量,这样用户就可以输入每个值,如下所示: %let classIin = 1; %let classIIin = 0.8; 现在,我想用9列中的一个变量替换上述%let语句中的每一个语句(每列对应

我完全不熟悉SAS中的宏/do循环/数组,但我一直在努力了解它们。事情进展不顺利

我有一个数据集,有148176行,9列。我想通过我的程序一个接一个地运行所有148176个组合(所以每一行都是一个接一个),并让它将每个结果作为一个长列表输出。最后我应该有148176个值

在使用宏块之前,我只使用了宏变量,这样用户就可以输入每个值,如下所示:

%let classIin = 1;
%let classIIin = 0.8;
现在,我想用9列中的一个变量替换上述%let语句中的每一个语句(每列对应于上面的一个宏变量,有9个我只是没有全部列出)

我开始尝试写这段代码,但我真的很困惑,我知道我错过了这个过程的关键点。如果有人有一些有用的视频教程我应该看,我很高兴这样做,因为我发现没有什么是帮助我到目前为止

在下文中,“AA”和“AB”是Work.MasterPlanList中的两个列名,但我不确定是否可以用这种方式调用变量

%macro masterlist;
%do i=1 %to 148176;
Data Work.test;
Set work.MasterPlanList(firstobs=&i obs=&i);
call symputx ('classIin', AA)
call symputx ('classIIin', AB)
%end;
%mend;

理论上,我会在代码中调用%宏,但另一个问题是,我需要在代码中的不同时间使用此列表中的每个变量。这是一个问题,还是我的宏会通过查看第1行、查看整个代码/计算集、吐出值1,然后返回到开头并查看第2行、查看代码/计算、值2等,直到148176?

如果没有更详细的计算,很难回答。例如,您可以只在数据步骤中执行所有计算,而不使用宏变量或宏

但是,如果您将一组参数的分析结构化为宏,则可以使用数据集生成对宏的多个调用。尽管对长复杂宏的150K调用相当多

假设您有一个名为%MYMACRO的宏,它有两个输入参数。您有一个SAS数据集,其中包含两个变量以及这些参数的值。然后,您可以使用CALL EXECUTE()或其他代码生成方法为每个观察生成一个宏调用

对于这种规模的代码生成,我发现使用数据步骤编写代码比使用调用执行更容易理解和调试。尤其是如果使用与宏参数相同的名称命名dataset变量

filename code temp;
data _null_;
  set my_metadata ;
  file code ;
  put '%mymacro(' var1= ',' var2= ')';
run;
%include code /source2; 

你为什么要这样做?我们将如何处理这些宏变量?你打算用它们来写SAS代码吗?如果是,什么类型的代码?请详细解释计算。数据集的作用是存储某个目标(如另一个程序或算法)使用的九个参数吗?是否有148176个不同的参数组合,您将得到结果?对于某些类型的计算,可以使用数据步编程语句一次执行一行,而不需要宏系统。对于在更复杂的系统中使用的参数,例如result=complex_system(数据准备+模型步骤+预测)步骤,数据步骤可用于调度复杂系统。听起来像是调用执行问题@Richard这是一个我已经编写的长程序,在整个过程中的不同时间使用9个不同的变量。这很可能是关于pinegulf提到的“callexecute”的事情,我现在正在读这个博客。它可以读取数百万行数据,但我希望这个程序在148176次不同的迭代中使用9个核心变量,然后输出148176个结果。听起来像是一个漫长的整体过程,数十万次重新判定数百万行。在1次迭代之后,您如何处理重新判定的行?为下一次迭代保留所有?使用单个度量值测量总体影响,并将该值与9个参数关联存储?我建议您尝试@Tom所描述的方法,但是扩展您的宏以测试已经处理的参数的特定组合,并在后续代码重新运行时跳过该组合。