SAS - 如果列的值不在列表中,则需要停止代码

时间:2017-01-30 17:42:46

标签: macros sas

我有一个名为CLIENT_ID的变量。它用于遍历一堆代码。问题是宏正在寻找特定的客户列表,如:

%stuff(CLIENTX)
%stuff(CLIENTA)

等等。因此,如果数据中出现新客户端(例如CLIENTY),则该客户端不会包含在输出中。

我想要:

  1. 对现有客户列表进行代码检查,如果找到新客户端则停止,输出该客户端的名称,以便手动更新宏
  2. 让代码检查新客户端,然后自动将它们添加到宏列表
  3. 我知道如何比较以找到新的客户端ID,它只是停止代码或更新代码,如果有一个我正在努力的新客户端。可能第二个是不可能的?但我希望至少有一些方法可以解决这个问题。

    我完全承认我不是宏专家。

1 个答案:

答案 0 :(得分:0)

您要做的是从数据中调用宏,而不是从编写代码中调用宏。

所以而不是

%yourMacro(clientX)
%yourMacro(clientY)

你这样做:

proc sql;
  select distinct cats('%yourMacro(',clientID,')')
    into :macro_call_list separated by ' '
    from your_Data
  ;
quit;

&macro_call_list.;

您可以将your_data指向主数据集(如果这是您拥有的),或者指向有效客户列表(如果您将其保存在单独的文件中(例如客户端位置人行横道或某些人))。无论最新的数据是什么。在查询中添加distinct可确保每个clientID只能进行一次调用。然后&macro_call_list包含所有这些%yourMacro(clientX)等调用,只需将该引用放入开放代码中即可调用它。