如何使用 sas 提示符使用多个文本值

How to use multiple text values using sas prompt

我正在尝试创建一个允许用户从列表中输入多个值的提示。我将提示类型用作 Text.
填充提示的方法:User select 来自静态列表的值
值的数量:多个值

我将提示的名称保留为 Products。基本上我想要一个宏,它的值例如 "product 1","product 2", Product 3", "product 4" 用逗号分隔。

当我尝试解析产品宏时,无论我 select 在提示中有多少产品,它总是解析第一个产品。这里它总是只解析贷款作为对产品宏的解析。我希望我 select 中的所有产品通过提示进入宏 product。示例 ("loan","Overdraft","RCF") 请建议在这种情况下要做什么

我做了一个提示,"Color",用彩虹的六种颜色,按照你描述的设置(和 "use throughout project")。

然后我将其附加到以下程序中:

%put _global_;

而我看到的是这个;

8          %LET Color0 = 4;
9          %LET Color2 = Red;
10         %LET Color3 = Yellow;
11         %LET Color4 = Orange;
12         %LET Color1 = Blue;
13         %LET Color_count = 4;
14         %LET Color = Blue;

这就是多值提示的工作原理:他们将第一个选择放在 &prompt,然后将选择的项目数放在 &prompt0,然后将选择的项目放在 &prompt1-&&prompt&prompt0 ].然后,您可以通过多种方式使用它们。你可以

%do i = 1 %to &color0.;
  %put &&color&i.;
%end;

例如

..几年后(可能是 SAS 9.4 的变化),但还有其他因素需要考虑。 如果您提供“(所有可能的值)”选项,并且用户做出此选择,则

  • &PromptValue = ALL_VALUES
  • &Prompt_Count = 1
  • &Prompt0 = listcount - 1
  • &Prompt1 .. PromptX 包含列表中的一项

..强迫你使用像这样的微宏来连接它们(组装学术术语 FL、WN、SP、SM):

%MACRO GetPrompt;
    %IF "&Terms" = "_ALL_VALUES_" %THEN %DO;
        %LET Terms = %sysfunc(catx(|, &Terms1, &Terms2, &Terms3, &Terms4));
    %END;
    %ELSE %DO;
        %DO inx = 2 %TO &TERMS_COUNT;
            %LET Terms = %sysfunc(catx(|, &Terms, &&Terms&inx));
        %END;
    %END;
%MEND GetTerms;