假设我有一个包含以下列的表:column_a
,column_b
和column_c
。这些列是事物的计数,我想在每列中添加两个,以创建新列column_a_new
,column_b_new
和column_c_new
。
如何遍历宏语句中的任意值列表?我知道如果我有一个整数序列,例如%do i=0 %to &n.
...
答案 0 :(得分:2)
我假设您想将列名加载到宏变量中,并通过这些值进行一些迭代。在这种情况下,%scan
是您的朋友。
/* Assuming items are separated by a space */
%let list_to_iterate = %str(item1 item2 item3 item4);
%let ii = 1;
%do %while (%scan(&list_to_iterate , &ii, %str( )) NE %str());
%let this_item = %scan(&list_to_iterate , &ii, %str( ));
/* Do what you have to do with &this_item here */
%let ii = %eval(&ii + 1);
%end;
但是,有更简单的方法可以实现您真正描述的内容,不是吗?只是做类似column_a_new = column_a + 1;
的事情吗?由于您正在寻找基于宏的解决方案,因此可能还不止如此。
答案 1 :(得分:2)
从列表中找出每个“令牌”,并将其用作发出作为数据步骤分配语句的源代码的基础:
const module: TestingModule = await Test.createTestingModule({
providers: [
LoggerService,
{ provide: 'Rollbar', useFactory: rollbarMockFactory },
],
}).compile();
答案 2 :(得分:2)
数组是为此目的而设计的,尽管此时您需要处理命名。有多种简单的方法可以做到这一点。
0.99
要自动创建变量列表,可以使用SASHELP.VCOLUMN数据集,也可以使用PROC CONTENTS并动态生成变量列表。 根据原始列表的指定方式,有多种方法可以生成以_new结尾的列表。