<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic STP and multiple-value prompt PROC SQL in Developers</title>
    <link>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97632#M3647</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Guys,&lt;/P&gt;&lt;P&gt;I have my STP and a prompt defined that allows to the user to select multiple values (by selecting the value, clicking the blue arrow to take it over to the selected-values box). Now in my PROC SQL I want to filter those values but dont quite now how to do it:&amp;nbsp; The prompt value returend is of a single value and not off of those&lt;/P&gt;&lt;P&gt;in a list like I could use for SQL as follow&lt;/P&gt;&lt;P&gt;WHERE myname IS IN (&amp;amp;allpromptvalues)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I looked at the %_eg_WhereParam macro but that did not do a miracle either.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Has someone done that and can help me?&lt;/P&gt;&lt;P&gt;We use SAS 9.2&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Thanks.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 17 Oct 2012 15:27:16 GMT</pubDate>
    <dc:creator>metalray</dc:creator>
    <dc:date>2012-10-17T15:27:16Z</dc:date>
    <item>
      <title>STP and multiple-value prompt PROC SQL</title>
      <link>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97632#M3647</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Guys,&lt;/P&gt;&lt;P&gt;I have my STP and a prompt defined that allows to the user to select multiple values (by selecting the value, clicking the blue arrow to take it over to the selected-values box). Now in my PROC SQL I want to filter those values but dont quite now how to do it:&amp;nbsp; The prompt value returend is of a single value and not off of those&lt;/P&gt;&lt;P&gt;in a list like I could use for SQL as follow&lt;/P&gt;&lt;P&gt;WHERE myname IS IN (&amp;amp;allpromptvalues)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I looked at the %_eg_WhereParam macro but that did not do a miracle either.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Has someone done that and can help me?&lt;/P&gt;&lt;P&gt;We use SAS 9.2&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Thanks.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Oct 2012 15:27:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97632#M3647</guid>
      <dc:creator>metalray</dc:creator>
      <dc:date>2012-10-17T15:27:16Z</dc:date>
    </item>
    <item>
      <title>Re: STP and multiple-value prompt PROC SQL</title>
      <link>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97633#M3648</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Let say you have a stored procedure, as you say, with one static list that allows multiple selections, and it is call PROMPT_1, inside the stored procedure when it execute it there will be several macro variables created containing the information you want:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PROMPT_1 will contain only the first, single value selected&lt;/P&gt;&lt;P&gt;PROMPT_1_COUNT will contain the count of items selected&lt;/P&gt;&lt;P&gt;PROMPT_10 the zero index will also contain the count of items selected&lt;/P&gt;&lt;P&gt;PROMPT_11-N the positive integer indexes will contain their respective values&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*remove comments if using character values in prompt */&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;array prompt_1[&amp;amp;prompt_1_count] /*$*/;&lt;/P&gt;&lt;P&gt;do i=1 to dim(prompt_1);&lt;/P&gt;&lt;P&gt;prompt_1&lt;I&gt;=/*quote(*/symget(cats(vname(prompt_1&lt;I&gt;),i))/*)*/;&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;call symputx('allpromptvalues',catx(',',of prompt_1&lt;LI&gt;));&lt;/LI&gt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Message was edited by: Matthew Kastin&#xD;
&#xD;
There was a syntax error in the array reference in the call symputx function&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Oct 2012 16:01:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97633#M3648</guid>
      <dc:creator>FriedEgg</dc:creator>
      <dc:date>2012-10-17T16:01:24Z</dc:date>
    </item>
    <item>
      <title>Re: STP and multiple-value prompt PROC SQL</title>
      <link>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97634#M3649</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;We call a macro to convert the enumerated prompt-generated macro variables into either a quoted or non-quoted list.&amp;nbsp; The quoted list might be handy for your SQL query.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here's the macro that we use (it could probably be more robust, but it works for us):&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro promptList(&lt;/P&gt;&lt;P&gt;&amp;nbsp; promptVar = /* specify the base name of the prompt to be made into a list */,&lt;/P&gt;&lt;P&gt;&amp;nbsp; quotedList = yes /* individual items in list will be quoted if yes */,&lt;/P&gt;&lt;P&gt;&amp;nbsp; listName = /* specify the name of the list to be created */&lt;/P&gt;&lt;P&gt;);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %* Build a list, named by the listName macro parameter of the prompt values selected. *;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %* The &amp;amp;promptVar._COUNT macro variable exists for multi-select macro prompts, so *;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %* loop through all the values selected - adding them to the list *;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %do i = 1 %to &amp;amp;&amp;amp;&amp;amp;promptVar._COUNT.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;i. eq 1 %then&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;quotedList eq yes %then&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let &amp;amp;listName. = %quote(%'&amp;amp;&amp;amp;&amp;amp;promptVar.%');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let &amp;amp;listName. = &amp;amp;&amp;amp;&amp;amp;promptVar.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;quotedList eq yes %then&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let &amp;amp;listName. = &amp;amp;&amp;amp;&amp;amp;listName., %quote(%'&amp;amp;&amp;amp;&amp;amp;promptVar&amp;amp;i.%');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let &amp;amp;listName. = &amp;amp;&amp;amp;&amp;amp;listName., &amp;amp;&amp;amp;&amp;amp;promptVar&amp;amp;i.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; %let &amp;amp;listName. = %unquote(&amp;amp;&amp;amp;&amp;amp;listName.);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%mend promptList;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Oct 2012 16:16:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97634#M3649</guid>
      <dc:creator>DavidRice</dc:creator>
      <dc:date>2012-10-17T16:16:20Z</dc:date>
    </item>
    <item>
      <title>Re: STP and multiple-value prompt PROC SQL</title>
      <link>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97635#M3650</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;BR /&gt;Hello drice0504,&lt;/P&gt;&lt;P&gt;I tried your macro but how do I use it in the sql query?&lt;BR /&gt;My idea was to use the macro variable that is the list and&lt;BR /&gt;put it in the code like this:&lt;/P&gt;&lt;P&gt;PROC sQL...&lt;/P&gt;&lt;P&gt;WHERE contractname IN (&amp;amp;LListOfContracts)&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Thanks for your input.&lt;/P&gt;&lt;P&gt;@FriedEgg, thanks for that as well. I have a dynamic list. &lt;BR /&gt;If I try to put in my prompt name in your example I get the following error:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ERROR: Illegal reference to the array prompt_1.&lt;/P&gt;&lt;P&gt;NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1159:1&amp;nbsp;&amp;nbsp; &lt;BR /&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data myNewlist;&lt;/P&gt;&lt;P&gt;array prompt_1[&amp;amp;contractsprompt_count] ;&lt;/P&gt;&lt;P&gt;do i=1 to dim(prompt_1);&lt;/P&gt;&lt;P&gt;prompt_1&lt;I&gt;=symget(cats(vname(prompt_1&lt;I&gt;),i));&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;call symputx('allpromptvalues',catx(',',of prompt_1));&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Oct 2012 07:31:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97635#M3650</guid>
      <dc:creator>metalray</dc:creator>
      <dc:date>2012-10-18T07:31:28Z</dc:date>
    </item>
    <item>
      <title>Re: STP and multiple-value prompt PROC SQL</title>
      <link>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97636#M3651</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello metalray,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;We would call the macro function prior to the PROC SQL and then use the generated "list" macro variable as you described.&amp;nbsp; If the unformatted prompt values are numeric, we set the quotedList parameter to no; if the unformatted prompt values are character, we set the quotedList parameter to yes.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So, the code might look like this:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%promptList(&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; promptVar = userID,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quotedList&amp;nbsp; = no,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; listName = userList&lt;/P&gt;&lt;P&gt;)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where USER_ID in (&amp;amp;userList);&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope this helps,&lt;/P&gt;&lt;P&gt;David&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Oct 2012 14:03:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97636#M3651</guid>
      <dc:creator>DavidRice</dc:creator>
      <dc:date>2012-10-18T14:03:32Z</dc:date>
    </item>
    <item>
      <title>Re: STP and multiple-value prompt PROC SQL</title>
      <link>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97637#M3652</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is old-school code that I have committed to memory because it is so useful. Give it a try:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql noprint ;&lt;/P&gt;&lt;P&gt;select distinct quote(trim(make)) /* Double quotes */&lt;/P&gt;&lt;P&gt;into :charpromptvalues&lt;/P&gt;&lt;P&gt;separated by ','&lt;/P&gt;&lt;P&gt;from sashelp.cars ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;select distinct cylinders &lt;/P&gt;&lt;P&gt;into :numpromptvalues&lt;/P&gt;&lt;P&gt;separated by ','&lt;/P&gt;&lt;P&gt;from sashelp.cars &lt;/P&gt;&lt;P&gt;where cylinders gt 0 ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;quit ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%put &amp;amp;charpromptvalues ;&lt;/P&gt;&lt;P&gt;%put &amp;amp;numpromptvalues ;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Oct 2012 21:56:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97637#M3652</guid>
      <dc:creator>acfarrer</dc:creator>
      <dc:date>2012-10-18T21:56:15Z</dc:date>
    </item>
    <item>
      <title>Re: STP and multiple-value prompt PROC SQL</title>
      <link>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97638#M3653</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Another option would be to turn David's nifty macro into a function -style macro, by having it return a value at the end.&amp;nbsp; Something like (untested):&lt;/P&gt;&lt;PRE&gt;%macro promptList(
&amp;nbsp; promptVar = /* specify the base name of the prompt to be made into a list */,
&amp;nbsp; quotedList = yes /* individual items in list will be quoted if yes */,&lt;BR /&gt; )
;

&amp;nbsp; %local i list;

&amp;nbsp; %* Build a list, of the prompt values selected. *;
&amp;nbsp; %* The &amp;amp;promptVar._COUNT macro variable exists for multi-select macro prompts, so *;
&amp;nbsp; %* loop through all the values selected - adding them to the list *;


&amp;nbsp; %do i = 1 %to &amp;amp;&amp;amp;&amp;amp;promptVar._COUNT.;
&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;i. eq 1 %then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;quotedList eq yes %then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let list = %quote(%'&amp;amp;&amp;amp;&amp;amp;promptVar.%');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let list = &amp;amp;&amp;amp;&amp;amp;promptVar.;
&amp;nbsp;&amp;nbsp;&amp;nbsp; %else

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %if &amp;amp;quotedList eq yes %then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let list = &amp;amp;&amp;amp;&amp;amp;listName., %quote(%'&amp;amp;&amp;amp;&amp;amp;promptVar&amp;amp;i.%');
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %let list = &amp;amp;&amp;amp;&amp;amp;listName., &amp;amp;&amp;amp;&amp;amp;promptVar&amp;amp;i.; 
&amp;nbsp; %end;
 
&amp;nbsp; %let list = %unquote(&amp;amp;&amp;amp;&amp;amp;listName.);
 
&amp;nbsp; &amp;amp;list /*return value*/
%mend promptList;


&lt;/PRE&gt;&lt;P&gt;Then you call it like:&lt;/P&gt;&lt;PRE&gt;proc sql;
&amp;nbsp; ...
&amp;nbsp; where USER_ID in (%promptList(userList));
quit;
&lt;/PRE&gt;&lt;P&gt;&lt;BR /&gt;--Q.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 22 Oct 2012 13:49:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Developers/STP-and-multiple-value-prompt-PROC-SQL/m-p/97638#M3653</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2012-10-22T13:49:52Z</dc:date>
    </item>
  </channel>
</rss>

