在从一个表中提取的循环内调用执行以执行宏

2024-05-16

我目前有以下情况

%macro sqlloop (event_id);

...lots of code, mostly proc sql segments ...

%mend;

生成一个输出表(名为export_table2)。我需要能够为另一个表(名为 vars)中的每个值运行此代码数十次。我的试用代码测试了我想要它做的事情如下(基本上手动输入这个 68 行表的前两个值)

data ;

%let empl_nbr_var = '222';
%let fleet = '7ER';
%let position = 'A'; 
%let base = 'BWI';

%sqlloop(event_id = 1);
run;

data summary_pilots;
set work.export_table2;
run;

data;
%let empl_nbr_var = '111';
%let fleet = '320'; 
%let position = 'B'; 
%let base = 'CHS';

%sqlloop(event_id = 2);

run;

data summary_pilots;
set summary_pilots work.export_table2;
run;

这会产生每次执行的最终输出,并堆叠到一个名为“summary_pilots”的表中。我怎样才能在循环中做到这一点,预先使用call execute迭代每一行vars? vars 的列正是我需要的宏变量,我想迭代每一行来分配这些宏变量并运行我的%sqlloop再次。谢谢您的帮助!

EDIT:

目前正在弄清楚调用执行是如何工作的,看看它在这里有什么帮助,但仍然有点卡住...下面的代码完全按照您的想法工作,将表变量中的所有变量打印到日志中。

data ;
set work.vars;
call execute( '%put='|| strip(empl_nbr_var)  || ';
%put = ' || strip(fleet) ||';
%put = '|| strip(position) ||'; 
%put = ' || strip(base) ||';' );
run;

我正在尝试使用下面的代码,但由于宏被奇怪地分配,我收到了大量的错误。 vars 列中的类型与我希望它们在宏中的类型完全匹配,但看起来这仍然可能是这里的问题?

data ;
set work.vars;
call execute( '
%let empl_nbr_var =' || strip(empl_nbr_var)  || ';
%let fleet = ' || strip(fleet) ||';
%let position = '|| strip(position) ||'; 
%let base = ' || strip(base) ||';

%sqlloop(event_id = 17);' );
run;

事件 ID 实际上在这里并不重要,所以我暂时将其保留为随机数。


假设你的work.Vars包含这样的数据:

empl_nbr_var fleet position base
222 7ER A BWI
111 320 B CHS
... ... ... ...

考虑扩展您的宏以接收此类输入参数:

%macro sqlloop(event_id, empl_nbr_var, fleet, position, base);

    ...lots of code, mostly proc sql segments ...

%mend;

然后,通过连接数据值构建运行宏call execute。下面传递17进event_id范围。

data _null_;
    set Work.Vars;

    args = catx("', '", empl_nbr_var, fleet, position, base);
    args = '%sqlloop(17,'''|| strip(args) || ''');';
    put args $char.;      /* VIEW CALL COMMAND */

    call execute(args);   /* RUN CALL COMMAND */
run;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在从一个表中提取的循环内调用执行以执行宏 的相关文章

  • R 中 if-else 中的逻辑运算符

    我有一个名为 mat 的下表 5 列和 3 行 AC CA RES 1 0 2 2 1 3 0 0 0 1 正在执行的操作是mat 1 mat 1 mat 2 我正在测试以下内容 1 如果一行的两列都为零 则结果应为 NA 2 如果一行中只
  • AS3 - for (... in ...) 与 for every (... in ...)

    以下代码执行完全相同的操作 之间有区别吗for each and for in var bar Array new Array 1 2 3 for var foo in bar trace foo for each var foo2 in
  • php 打印 aa aaa ab aab 直到 zzz 的算法

    你好 我需要打印从 a 到 zzz 最多 3 个字母 例如我的输出应该是 A B Z AA AB AZ BA BB ZZ AAA AAB ZZZ 我在过去的 5 个小时里努力尝试 我找不到任何逻辑 我尝试了下面的代码 PHP 有一个方便的功
  • 在 Bash 中从文本文件创建数组

    脚本采用 URL 解析它的所需字段 并将其输出重定向以保存在文件中 file txt 每次找到字段时 输出都会保存在新行中 file txt A Cat A Dog A Mouse etc 我要拿file txt并在新脚本中从中创建一个数组
  • int 对象在尝试对数字的数字求和时不可迭代? [复制]

    这个问题在这里已经有答案了 我有这个代码 inp int input Enter a number for i in inp n n i print n 但它抛出一个错误 int object is not iterable 我想通过将每个
  • 如何仅选择数组中的第一列并对其求和?

    这是我的代码 import numpy as np contrainte1 1080 0 65 minutes tous les jours contrainte2 720 0 55 minutes du lundi au vendredi
  • Excel VBA 循环遍历 10,000 组行,每组包含 20 行

    如何将当前按行循环的 Excel VBA 代码转换为循环 20 行集 据我了解 Step函数可能与以下行一起使用 Range V1 Value Application Index vInput1 r 0 但是 我不确定如何修改代码以循环遍历
  • 打印出每一行(从文件中)并带有行号python [重复]

    这个问题在这里已经有答案了 我有一个 txt包含一些单词的文档 每个单词都在不同的行上 例如 hello too me 我试图弄清楚如何打印每一行以及每个单词所在的行号 但从 1 开始 而不是 0 所需的输出 1 hello 2 too 3
  • 终止或中断java 8流循环[重复]

    这个问题在这里已经有答案了 我有一个包含以下内容的 java 8 流循环 void matchSellOrder Market market Order sellOrder System out println selling market
  • 在 C++ 中,为什么我们不能使用 > 和 < 来比较迭代器? [复制]

    这个问题在这里已经有答案了 我被问过这个问题 我真的不知道为什么 如果你有指针int x 您可以将指针与 gt and lt 因为它代表内存位置 例如0x0000 0x0004 0x0008等等 我知道迭代器和指针是不同的 但它们的行为方式
  • 如何一次运行多个后台线程任务?

    我正在尝试循环遍历包含 2016 年 10 月日期的 String 对象数组 这意味着 31 个 String 对象 2016 年 10 月 1 日 2016 年 10 月 31 日 对于每个对象 我想从数据库检索一些数据并附加返回值 也是
  • WordPress Loop:如何将每 3 个帖子包装到一个 div 中?

    我正在尝试这个 div div 但这不起作用 谢谢你 感谢各位的支持 我尝试了两种解决方案 但都不起作用 我最终做到了这
  • 使用 jQuery .each 迭代关联数组

    可能对这个问题最有影响的因素是我现在非常困 我有一个数组 我启动它 var cells 然后我在其中放入一些值 jQuery 对象 例如 td each function var td this cells td attr id td 现在
  • Python 多元简单线性回归

    注意这是not关于多元回归的问题 这是一个关于在 Python NumPy 2 7 中多次进行简单 单变量 回归的问题 我有两个m x n arrays x and y 这些行彼此对应 每对都是用于测量的 x y 点的集合 那是 plt p
  • 遍历/循环 XSL 键:如何?

    有没有办法遍历一个键并输出它包含的所有值
  • Eclipse 中的“环绕”模板:foreach

    我是 Eclipse 新手 主要用于 Java 我之前使用过 IntelliJ Idea 其中可以选择一个扩展 Iteratable 集合 列表等 的变量 并让它生成正确的 foreach 循环 我知道 Eclipse 对 foreach
  • SAS 创建动态间隔

    这有点复杂 至少对我来说是这样 这是我必须做的 假设我有以下数据集 date price volume 02 Sep 40 100 03 Sep 45 200 04 Sep 46 150 05 Sep 43 300 假设我有一个断点 我希望
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • flex 3 迭代对象值

    我有一个代表数据库表的对象 我想迭代这个对象并打印每个值 我可以用什么来做到这一点 我想在我的mxml而不是actionscript中执行此操作 对于每个对象属性我想创建一个输入字段 查找有关 Flex 3 循环的文档 如果你这样做 你会发
  • 总是使用 Final?

    我读过 将某些东西做成最终的 然后在循环中使用它会带来更好的性能 但这对一切都有好处吗 我有很多地方没有循环 但我将 Final 添加到局部变量中 它会使速度变慢还是仍然很好 还有一些地方我有一个全局变量final 例如android Pa

随机推荐