遍历值列表

时间:2019-08-06 17:19:32

标签: sas

假设我有一个包含以下列的表:column_acolumn_bcolumn_c。这些列是事物的计数,我想在每列中添加两个,以创建新列column_a_newcolumn_b_newcolumn_c_new

如何遍历宏语句中的任意值列表?我知道如果我有一个整数序列,例如%do i=0 %to &n. ...

,这将很容易

3 个答案:

答案 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结尾的列表。