<?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 How can I conditionally run either MacroA or MacroB based on a do loop in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/534513#M146675</link>
    <description>&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've been writing SAS code for about a month now so obviously don't know everything and I was wondering if anyone had any thoughts about why my code won't execute correctly.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am essentially trying to make it so that if a specific variable is missing ('.') then one macro runs and if it is not missing then another macro runs. I have tried various iterations of the if statement and it still won't run the first macro when a value is missing. In the below example the variable is only missing when i=2. I have only included the first 3 Questions but there are a total of 116 just for context.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There are 3 data sets being used in this code QCROSSREF1718 is just a list of the question numbers for 2017 and 2018, Survey1 is the responses to a survey for 2018 and Survey2 is the responses to the survey from 2017.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please see code, log and example data sets below. Apologies for the long code. Thanks in advance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;options spool;

proc sql noprint;
		select count(*)
 			into :NObs
		from work.QCROSSREF1718;

		select Q18
			into :Q18Y1-:Q18Y%left(&amp;amp;NObs)
		from work.QCROSSREF1718;

		select Q17
 			into :Q17Y1-:Q17Y%left(&amp;amp;NObs)
		from work.QCROSSREF1718;

		select DESC18
 			into :QDesc1-:QDesc%left(&amp;amp;NObs)
		from work.QCROSSREF1718;

		select Weight18
			into :QYWeight1-:QYWeight%left(&amp;amp;NObs)
		from work.QCROSSREF1718;

		select Weight17
			into :Q17YWeight1-:Q17YWeight%left(&amp;amp;NObs)
		from work.QCROSSREF1718;
quit;

/*Problem code*/

%macro Umbrella;
	%do i=1 %to 3;	
	%let Q17 = &amp;amp;&amp;amp;Q17Y&amp;amp;i;
	
		%if &amp;amp;Q17='.' %then %do;
			%only18;
		%end;
		%if &amp;amp;Q17~='.' %then %do;
			%comp1718;
		%end;

	%end;
%mend Umbrella;

%Umbrella;

/*macro to run if value is not missing*/

%macro Comp1718;
	%do i=1 %to 3;

		%let Q18 = &amp;amp;&amp;amp;Q18Y&amp;amp;i;
		%let Q17 = &amp;amp;&amp;amp;Q17Y&amp;amp;i;
		%let QD = &amp;amp;&amp;amp;QDesc&amp;amp;i;
		%let Q18Weight=&amp;amp;&amp;amp;QYWeight&amp;amp;i;
		%let Q17Weight=&amp;amp;&amp;amp;Q17YWeight&amp;amp;i;
		
		        /*2018*/
			PROC SURVEYFREQ data=work.Survey1 nosummary;
				tables &amp;amp;QD
				/ row nofreq nostd nowt nototal;
				weight &amp;amp;Q18Weight;
				ods output OneWay=CrossTab18;
			run;
			
								
			/*2017*/
			PROC SURVEYFREQ data=Work.Survey2 nosummary;
				tables &amp;amp;Q17
				/ row nofreq nostd nowt nototal;
				weight &amp;amp;Q17Weight;
				ods output ONEWAY=CrossTab17;
			run;
									
			/*Join tables*/
			PROC SQL;
			   CREATE TABLE WORK.Comparison&amp;amp;Q18 AS 
			   SELECT t1.&amp;amp;QD, 
		          t2.PERCENT17, 
		          t1.PERCENT18,
			  /*Calculate percent difference*/
		          (t1.Percent-t2.Percent) AS Percent_Difference
      			FROM WORK.CrossTab18 t1
           			Full JOIN WORK.CROSSTAB17 t2 ON (t1.&amp;amp;QD = t2.&amp;amp;Q17);
			QUIT;
	%end;
%mend Comp1718;

/*macro to run if value is missing*/

%macro only18;
	%do i=1 %to 3;

		%let Q18 = &amp;amp;&amp;amp;Q18Y&amp;amp;i;
		%let QD = &amp;amp;&amp;amp;QDesc&amp;amp;i;
		%let Q18Weight=&amp;amp;&amp;amp;QYWeight&amp;amp;i;
				
		        PROC SURVEYFREQ data=work.Survey1 nosummary;
				tables &amp;amp;QD
				/ row nofreq nostd nowt nototal;
				weight &amp;amp;Q18Weight;
				ods output OneWay=CrossTab18;
			run;
		
			PROC SQL;
				CREATE TABLE WORK.Comparison&amp;amp;Q18 AS
				SELECT t.&amp;amp;QD,
				t.PERCENT
      			FROM WORK.CrossTab18;
			QUIT;			
	%end;
%mend only18;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;LOG Errors below (showing that it is still just running %Comp1718 in spite of %umbrella if statements&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#### Q18=F12 ####&lt;/P&gt;&lt;P&gt;#### Q17=. ####&lt;/P&gt;&lt;P&gt;#### Q18Weight = F12Weight ####&lt;/P&gt;&lt;P&gt;#### Q17Weight = . ####&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;NOTE: Line generated by the macro variable "Q17".&lt;/P&gt;&lt;P&gt;75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t1..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 76&lt;/P&gt;&lt;P&gt;ERROR 22-322: Syntax error, expecting one of the following: a name, *.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR 76-322: Syntax error, statement will be ignored.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR: WHERE clause operator requires compatible variables.&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SURVEYFREQ&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;NOTE: Line generated by the macro variable "Q17".&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t2..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&lt;/P&gt;&lt;P&gt;NOTE: Line generated by the macro variable "Q17".&lt;/P&gt;&lt;P&gt;75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F_.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 201&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR 22-322: Syntax error, expecting one of the following: a name, ;, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR 201-322: The option is not recognized and will be ignored.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Data Examples below:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;QCROSSREF1718 (this essentially just gives the columns titles needed from the two main data sets. The reason for all the different columns is that the naming conventions between years are not consistent)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Q18&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Q17&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DESC18&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WEIGHT18&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WEIGHT17&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;F11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F11_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F11Weight&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F11_Weight&lt;/P&gt;&lt;P&gt;F12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;STRONG&gt;&amp;nbsp;.&amp;nbsp; &amp;nbsp;&lt;/STRONG&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F12_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F12Weight&lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;F13&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F13_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F13Weight&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F12_Weight&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Survey1&amp;nbsp; (this is fictitious data for example, the real data set has 18000 records)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;F11&amp;nbsp; &amp;nbsp; &amp;nbsp; F11_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp;F11Weight&amp;nbsp; &amp;nbsp; &amp;nbsp;F12&amp;nbsp; &amp;nbsp; &amp;nbsp; F12_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F12Weight&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F13&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F13_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F13Weight&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.5689&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.2525&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sometimes&amp;nbsp; &amp;nbsp; &amp;nbsp; 0.7895&lt;/P&gt;&lt;P&gt;0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.5689&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.5698&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.2689&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.4475&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sometimes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.6896&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.7895&amp;nbsp;&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sometimes&amp;nbsp; &amp;nbsp;0.6989&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.5698&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.5887&lt;/P&gt;&lt;P&gt;0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.4475&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.2525&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sometimes&amp;nbsp; &amp;nbsp; &amp;nbsp; 0.3698&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Survey2&amp;nbsp;(this is fictitious data for example, the real data set has 17000 records)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;F11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F11_Weight&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F12_Weight&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.3658&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.6989&lt;/P&gt;&lt;P&gt;No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1.0001&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.9875&lt;/P&gt;&lt;P&gt;Sometimes&amp;nbsp; &amp;nbsp;0.3587&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.4578&lt;/P&gt;&lt;P&gt;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.2151&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sometimes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.3457&lt;/P&gt;&lt;P&gt;No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.5877&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.4578&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Please feel free to ask for any clarifications etc, I tried to make this as clear as possible but this is my first time posting so might not be.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 11 Feb 2019 16:19:48 GMT</pubDate>
    <dc:creator>KMU</dc:creator>
    <dc:date>2019-02-11T16:19:48Z</dc:date>
    <item>
      <title>How can I conditionally run either MacroA or MacroB based on a do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/534513#M146675</link>
      <description>&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I've been writing SAS code for about a month now so obviously don't know everything and I was wondering if anyone had any thoughts about why my code won't execute correctly.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am essentially trying to make it so that if a specific variable is missing ('.') then one macro runs and if it is not missing then another macro runs. I have tried various iterations of the if statement and it still won't run the first macro when a value is missing. In the below example the variable is only missing when i=2. I have only included the first 3 Questions but there are a total of 116 just for context.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There are 3 data sets being used in this code QCROSSREF1718 is just a list of the question numbers for 2017 and 2018, Survey1 is the responses to a survey for 2018 and Survey2 is the responses to the survey from 2017.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please see code, log and example data sets below. Apologies for the long code. Thanks in advance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;options spool;

proc sql noprint;
		select count(*)
 			into :NObs
		from work.QCROSSREF1718;

		select Q18
			into :Q18Y1-:Q18Y%left(&amp;amp;NObs)
		from work.QCROSSREF1718;

		select Q17
 			into :Q17Y1-:Q17Y%left(&amp;amp;NObs)
		from work.QCROSSREF1718;

		select DESC18
 			into :QDesc1-:QDesc%left(&amp;amp;NObs)
		from work.QCROSSREF1718;

		select Weight18
			into :QYWeight1-:QYWeight%left(&amp;amp;NObs)
		from work.QCROSSREF1718;

		select Weight17
			into :Q17YWeight1-:Q17YWeight%left(&amp;amp;NObs)
		from work.QCROSSREF1718;
quit;

/*Problem code*/

%macro Umbrella;
	%do i=1 %to 3;	
	%let Q17 = &amp;amp;&amp;amp;Q17Y&amp;amp;i;
	
		%if &amp;amp;Q17='.' %then %do;
			%only18;
		%end;
		%if &amp;amp;Q17~='.' %then %do;
			%comp1718;
		%end;

	%end;
%mend Umbrella;

%Umbrella;

/*macro to run if value is not missing*/

%macro Comp1718;
	%do i=1 %to 3;

		%let Q18 = &amp;amp;&amp;amp;Q18Y&amp;amp;i;
		%let Q17 = &amp;amp;&amp;amp;Q17Y&amp;amp;i;
		%let QD = &amp;amp;&amp;amp;QDesc&amp;amp;i;
		%let Q18Weight=&amp;amp;&amp;amp;QYWeight&amp;amp;i;
		%let Q17Weight=&amp;amp;&amp;amp;Q17YWeight&amp;amp;i;
		
		        /*2018*/
			PROC SURVEYFREQ data=work.Survey1 nosummary;
				tables &amp;amp;QD
				/ row nofreq nostd nowt nototal;
				weight &amp;amp;Q18Weight;
				ods output OneWay=CrossTab18;
			run;
			
								
			/*2017*/
			PROC SURVEYFREQ data=Work.Survey2 nosummary;
				tables &amp;amp;Q17
				/ row nofreq nostd nowt nototal;
				weight &amp;amp;Q17Weight;
				ods output ONEWAY=CrossTab17;
			run;
									
			/*Join tables*/
			PROC SQL;
			   CREATE TABLE WORK.Comparison&amp;amp;Q18 AS 
			   SELECT t1.&amp;amp;QD, 
		          t2.PERCENT17, 
		          t1.PERCENT18,
			  /*Calculate percent difference*/
		          (t1.Percent-t2.Percent) AS Percent_Difference
      			FROM WORK.CrossTab18 t1
           			Full JOIN WORK.CROSSTAB17 t2 ON (t1.&amp;amp;QD = t2.&amp;amp;Q17);
			QUIT;
	%end;
%mend Comp1718;

/*macro to run if value is missing*/

%macro only18;
	%do i=1 %to 3;

		%let Q18 = &amp;amp;&amp;amp;Q18Y&amp;amp;i;
		%let QD = &amp;amp;&amp;amp;QDesc&amp;amp;i;
		%let Q18Weight=&amp;amp;&amp;amp;QYWeight&amp;amp;i;
				
		        PROC SURVEYFREQ data=work.Survey1 nosummary;
				tables &amp;amp;QD
				/ row nofreq nostd nowt nototal;
				weight &amp;amp;Q18Weight;
				ods output OneWay=CrossTab18;
			run;
		
			PROC SQL;
				CREATE TABLE WORK.Comparison&amp;amp;Q18 AS
				SELECT t.&amp;amp;QD,
				t.PERCENT
      			FROM WORK.CrossTab18;
			QUIT;			
	%end;
%mend only18;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;LOG Errors below (showing that it is still just running %Comp1718 in spite of %umbrella if statements&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;#### Q18=F12 ####&lt;/P&gt;&lt;P&gt;#### Q17=. ####&lt;/P&gt;&lt;P&gt;#### Q18Weight = F12Weight ####&lt;/P&gt;&lt;P&gt;#### Q17Weight = . ####&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;NOTE: Line generated by the macro variable "Q17".&lt;/P&gt;&lt;P&gt;75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t1..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;_&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 76&lt;/P&gt;&lt;P&gt;ERROR 22-322: Syntax error, expecting one of the following: a name, *.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR 76-322: Syntax error, statement will be ignored.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR: WHERE clause operator requires compatible variables.&lt;/P&gt;&lt;P&gt;NOTE: PROCEDURE SURVEYFREQ&lt;/P&gt;&lt;P&gt;NOTE: The SAS System stopped processing this step because of errors.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;NOTE: Line generated by the macro variable "Q17".&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t2..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 200&lt;/P&gt;&lt;P&gt;NOTE: Line generated by the macro variable "Q17".&lt;/P&gt;&lt;P&gt;75&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; F_.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ___&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 201&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR 22-322: Syntax error, expecting one of the following: a name, ;, _ALL_, _CHARACTER_, _CHAR_, _NUMERIC_.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR 201-322: The option is not recognized and will be ignored.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Data Examples below:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;QCROSSREF1718 (this essentially just gives the columns titles needed from the two main data sets. The reason for all the different columns is that the naming conventions between years are not consistent)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Q18&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Q17&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DESC18&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;WEIGHT18&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; WEIGHT17&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;F11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F11_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F11Weight&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F11_Weight&lt;/P&gt;&lt;P&gt;F12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;STRONG&gt;&amp;nbsp;.&amp;nbsp; &amp;nbsp;&lt;/STRONG&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F12_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F12Weight&lt;STRONG&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;F13&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F13_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F13Weight&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F12_Weight&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Survey1&amp;nbsp; (this is fictitious data for example, the real data set has 18000 records)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;F11&amp;nbsp; &amp;nbsp; &amp;nbsp; F11_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp;F11Weight&amp;nbsp; &amp;nbsp; &amp;nbsp;F12&amp;nbsp; &amp;nbsp; &amp;nbsp; F12_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F12Weight&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F13&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F13_Desc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F13Weight&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.5689&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.2525&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sometimes&amp;nbsp; &amp;nbsp; &amp;nbsp; 0.7895&lt;/P&gt;&lt;P&gt;0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.5689&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.5698&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.2689&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.4475&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sometimes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.6896&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.7895&amp;nbsp;&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sometimes&amp;nbsp; &amp;nbsp;0.6989&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.5698&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.5887&lt;/P&gt;&lt;P&gt;0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.4475&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.2525&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sometimes&amp;nbsp; &amp;nbsp; &amp;nbsp; 0.3698&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Survey2&amp;nbsp;(this is fictitious data for example, the real data set has 17000 records)&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;F11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;F11_Weight&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; F12_Weight&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.3658&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.6989&lt;/P&gt;&lt;P&gt;No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1.0001&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.9875&lt;/P&gt;&lt;P&gt;Sometimes&amp;nbsp; &amp;nbsp;0.3587&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.4578&lt;/P&gt;&lt;P&gt;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.2151&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Sometimes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.3457&lt;/P&gt;&lt;P&gt;No&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.5877&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Yes&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0.4578&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Please feel free to ask for any clarifications etc, I tried to make this as clear as possible but this is my first time posting so might not be.&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 11 Feb 2019 16:19:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/534513#M146675</guid>
      <dc:creator>KMU</dc:creator>
      <dc:date>2019-02-11T16:19:48Z</dc:date>
    </item>
    <item>
      <title>Re: How can I conditionally run either MacroA or MacroB based on a do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/534997#M146848</link>
      <description>&lt;P&gt;One thing that sticks out is that this should probably be&lt;/P&gt;
&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token macrostatement"&gt;%if&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;Q17&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;.&lt;/SPAN&gt; &lt;SPAN class="token macrostatement"&gt;%then&lt;/SPAN&gt; &lt;SPAN class="token macrostatement"&gt;%do&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;instead of&lt;/P&gt;
&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token macrostatement"&gt;%if&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;Q17&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'.'&lt;/SPAN&gt; &lt;SPAN class="token macrostatement"&gt;%then&lt;/SPAN&gt; &lt;SPAN class="token macrostatement"&gt;%do&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Macro variables are always strings and needn't (shouldn't really) be quoted.&lt;/P&gt;</description>
      <pubDate>Tue, 12 Feb 2019 20:45:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/534997#M146848</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2019-02-12T20:45:18Z</dc:date>
    </item>
    <item>
      <title>Re: How can I conditionally run either MacroA or MacroB based on a do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/535002#M146849</link>
      <description>&lt;P&gt;One issue you have is that you use the same macro variable name to control loops inside macros called by another macro. If you are going to do so you need to define the loop variable as %local before using it. Other wise the loop counter also gets set and incremented by the macros called in your outer macro %umbrella.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token macrostatement"&gt;%if&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;&amp;amp;&lt;/SPAN&gt;Q17&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token string"&gt;'.'&lt;/SPAN&gt; &lt;SPAN class="token macrostatement"&gt;%then&lt;/SPAN&gt; &lt;SPAN class="token macrostatement"&gt;%do&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token punctuation"&gt;does not test if the macro variable Q17's value is missing, it tests to see if the value is actually '.'. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token punctuation"&gt;A macro I borrowed a long time ago:&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;/* macro to test macro parameters             */
/* returns 1 if the tested parameter is blank */
/* 0 otherwise, blank means all charaters are,*/
/* or are macro variables that resolve to a,  */
/* blank                                      */
/* param can be upto 65,531 characters long   */
/* if numeric and several 1000 digits long may*/
/* hang the session. (Windows 32 bit OS)      */
/* NOT a test for a NULL (zero length string) */
/* though may work for some of those as well  */

%macro isBlank(param);
%sysevalf(%superq(&amp;amp;param)=,boolean)
%mend isBlank;
&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN class="token punctuation"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token punctuation"&gt;Using that macro you would use&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token punctuation"&gt;%if %isblank(Q17) %then %do &amp;lt;whatever when the macro variable is blank&amp;gt;. Or you can use explicit comparison with 1 (blank) or 0 (not blank)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token punctuation"&gt;Note that there is NO &amp;amp; for the macro variable. If you pass something that is not the name of a macro variable there will be a Warning about unresolved symbolic reference.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token punctuation"&gt;You will want to learn to set the system options Mprint and/or symbolgen and/or mlogic before executing macros while debugging them. Mprint will show the generated program text. The error messages generally make more sense in that context. Symbolgen will go through the resolution steps of creating values from macro variables. Mlogic shows results of logic constructs such as %if %then.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 12 Feb 2019 20:52:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/535002#M146849</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2019-02-12T20:52:08Z</dc:date>
    </item>
    <item>
      <title>Re: How can I conditionally run either MacroA or MacroB based on a do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/535028#M146856</link>
      <description>&lt;P&gt;Because macro language (unlike SAS language) is a text-based language, you don't need quotes to specify a character literal value.&amp;nbsp; So macro doesn't use a pair of ' characters to designate a character literal.&amp;nbsp; Just use the character literal unquoted.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I.e. this statement&lt;/P&gt;
&lt;PRE&gt;%if &amp;amp;Q17='.' %then %do;
&lt;/PRE&gt;
&lt;P&gt;will fail, because the macrovar Q17 does NOT have quotes - and therefore doesn't match '.'.&amp;nbsp; Instead I suggest&lt;/P&gt;
&lt;PRE&gt;%if &amp;amp;Q17=. %then %do;
	%only18;
%end;
%else  %do;
	%comp1718;
%end;
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also you can make your initial proc sql much more efficient, by simulataneously does all the select INTO expressions, as in:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql noprint;
		select Q18,
		       Q17,
		       Q17,
		       Weight18,
		       Weight17
        into 
			:Q18Y1-:Q18Y999,
 			:Q17Y1-:Q17Y999,
 			:QDesc1-:QDesc999,
			:QYWeight1-:QYWeight999,
			:Q17YWeight1-:Q17YWeight999

		from work.QCROSSREF1718;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Note that I use 999 as the upper limit instead of NOBS.&amp;nbsp; Don't worry.&amp;nbsp; If there are fewer than 999 observations in QCROSSREF1718 then the "extra" macrovars will not be generated.&amp;nbsp;&amp;nbsp; And, as a bonus,&amp;nbsp;there will also be produced a new macrovar:&amp;nbsp;SQLOBS, which is the number of observations produced in the select statement.&amp;nbsp;&amp;nbsp; So you can use &amp;amp;SQLOBS as an upper limit to any subsequent do loop you need to implement.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Just be sure to use a number (I used 999) that is not less than the maximum expected number of observations.&lt;/P&gt;</description>
      <pubDate>Tue, 12 Feb 2019 21:42:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/535028#M146856</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2019-02-12T21:42:34Z</dc:date>
    </item>
    <item>
      <title>Re: How can I conditionally run either MacroA or MacroB based on a do loop</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/535143#M146918</link>
      <description>&lt;P&gt;Thanks everyone for your help I had to modify the code a little on top of your suggestions but it is now working as expected.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 13 Feb 2019 10:59:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-can-I-conditionally-run-either-MacroA-or-MacroB-based-on-a/m-p/535143#M146918</guid>
      <dc:creator>KMU</dc:creator>
      <dc:date>2019-02-13T10:59:05Z</dc:date>
    </item>
  </channel>
</rss>

