<?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 Re: if else then do statement in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/if-else-then-do-statement/m-p/885311#M349816</link>
    <description>&lt;P&gt;You should not attempt to compare a CHARACTER variable like EMAIL_ADDR to a NUMERIC constant like .&lt;/P&gt;
&lt;P&gt;If you want to tell if a character variable is missing you can compare it to an empty string like ' '.&lt;/P&gt;
&lt;P&gt;If you want to test if a variable is missing and aren't sure if it will be a numeric or a character variable then just use the MISSING() function.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do you want&amp;nbsp;Email_OptIn to be a character variable? Like in your first reference to it?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Email_OptIn = '';&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Or do you want it to be a numeric variable? Like in your later references to it.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;EMail_OptIn = 1;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I am not sure what logic you are trying to implement.&amp;nbsp; I am also not sure what you think the ~ symbol means.&amp;nbsp; Are you trying to use it as a substitute for the NOT operator?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Can you describe in words what situations lead to&amp;nbsp;&lt;SPAN&gt;EMail_OptIn = 1?&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;And what situations should lead to&amp;nbsp;EMail_OptIn = 0 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;and what situations should lead to&amp;nbsp;EMail_OptIn = ,&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Can you show the expected result for your example input?&lt;/SPAN&gt;&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;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 18 Jul 2023 16:33:39 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2023-07-18T16:33:39Z</dc:date>
    <item>
      <title>if else then do statement</title>
      <link>https://communities.sas.com/t5/SAS-Programming/if-else-then-do-statement/m-p/885306#M349814</link>
      <description>&lt;P&gt;hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;hope all is good.&amp;nbsp; I want to use an if else then do statement to generate 1, 0 and blank on a data step with the below data,&amp;nbsp; I am getting a road block as my statements are not correct.&amp;nbsp; can someone assist? thanks a lot.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="495"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="187"&gt;EMAIL_ADDR&lt;/TD&gt;
&lt;TD width="77"&gt;HomePh&lt;/TD&gt;
&lt;TD width="77"&gt;CellPhn&lt;/TD&gt;
&lt;TD width="154"&gt;CONSENT_END_DATE&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;12Aug2017 12:19:22.237&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;12Aug2017 12:19:22.237&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;28Feb2018 10:29:18.003&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;28Feb2018 10:29:18.003&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;this is the data step that I have:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;data Optin; set test;&lt;/DIV&gt;
&lt;DIV&gt;if Email_Addr ~= . then do;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; if Email_Addr = . then Email_OptIn = '';&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; else if Email_Addr = Channel_Value and Consent_End_Date ~= . then EMail_OptIn = 1;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; else if Email_Addr ~= . and Channel_value ~= . and Consent_End_Date = . then Email_OptIn = 1;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; end;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;run;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;I want to do this for email_addr, HomePhone and Cell Phone.&lt;/DIV&gt;</description>
      <pubDate>Tue, 18 Jul 2023 15:59:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/if-else-then-do-statement/m-p/885306#M349814</guid>
      <dc:creator>Eugenio211</dc:creator>
      <dc:date>2023-07-18T15:59:33Z</dc:date>
    </item>
    <item>
      <title>Re: if else then do statement</title>
      <link>https://communities.sas.com/t5/SAS-Programming/if-else-then-do-statement/m-p/885310#M349815</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data Optin; 

set test;

if not missing(Email_Addr) then do;

    if missing(Email_Addr) then call missing(email_optin);
    else if Email_Addr = Channel_Value and missing(Consent_End_Date)  then EMail_OptIn = 1;
    else if not missing(Email_addr) and not missing(Channel_value) and missing(Consent_End_Date) then Email_OptIn = 1;

end;

run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I've converted your code to use missing and call missing() as they're easier to read/follow IMO.&lt;/P&gt;
&lt;P&gt;Let's look at what the program.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;nbsp;If not missing email address, then do this set of instructions:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;1. If missing email address set opt in to missing -&amp;gt; because this is nested in the if not missing portion, this will never be true.&lt;/P&gt;
&lt;P&gt;2. Check if the email address is the same as the channel value, and you're not missing a consent end date, then set opt in = 1. Channel value is not shown so no way to check this logic.&lt;/P&gt;
&lt;P&gt;3.&amp;nbsp; If not missing channel value, and not missing email address (already checked for before you entered this step) and missing consent date, set optin to 1.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The logic here seems flawed but I have no idea what it should be....&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;+&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/302621"&gt;@Eugenio211&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;hope all is good.&amp;nbsp; I want to use an if else then do statement to generate 1, 0 and blank on a data step with the below data,&amp;nbsp; I am getting a road block as my statements are not correct.&amp;nbsp; can someone assist? thanks a lot.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="495"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="187"&gt;EMAIL_ADDR&lt;/TD&gt;
&lt;TD width="77"&gt;HomePh&lt;/TD&gt;
&lt;TD width="77"&gt;CellPhn&lt;/TD&gt;
&lt;TD width="154"&gt;CONSENT_END_DATE&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank" rel="noopener"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank" rel="noopener"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank" rel="noopener"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;12Aug2017 12:19:22.237&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank" rel="noopener"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;12Aug2017 12:19:22.237&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank" rel="noopener"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;28Feb2018 10:29:18.003&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;A href="mailto:myemail@gmail.com" target="_blank" rel="noopener"&gt;myemail@gmail.com&lt;/A&gt;&lt;/TD&gt;
&lt;TD&gt;1234567890&lt;/TD&gt;
&lt;TD&gt;9876543210&lt;/TD&gt;
&lt;TD&gt;28Feb2018 10:29:18.003&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;this is the data step that I have:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;data Optin; set test;&lt;/DIV&gt;
&lt;DIV&gt;if Email_Addr ~= . then do;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; if Email_Addr = . then Email_OptIn = '';&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; else if Email_Addr = Channel_Value and Consent_End_Date ~= . then EMail_OptIn = 1;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; else if Email_Addr ~= . and Channel_value ~= . and Consent_End_Date = . then Email_OptIn = 1;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; end;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;run;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;I want to do this for email_addr, HomePhone and Cell Phone.&lt;/DIV&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 18 Jul 2023 16:25:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/if-else-then-do-statement/m-p/885310#M349815</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2023-07-18T16:25:35Z</dc:date>
    </item>
    <item>
      <title>Re: if else then do statement</title>
      <link>https://communities.sas.com/t5/SAS-Programming/if-else-then-do-statement/m-p/885311#M349816</link>
      <description>&lt;P&gt;You should not attempt to compare a CHARACTER variable like EMAIL_ADDR to a NUMERIC constant like .&lt;/P&gt;
&lt;P&gt;If you want to tell if a character variable is missing you can compare it to an empty string like ' '.&lt;/P&gt;
&lt;P&gt;If you want to test if a variable is missing and aren't sure if it will be a numeric or a character variable then just use the MISSING() function.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do you want&amp;nbsp;Email_OptIn to be a character variable? Like in your first reference to it?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Email_OptIn = '';&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Or do you want it to be a numeric variable? Like in your later references to it.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;EMail_OptIn = 1;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I am not sure what logic you are trying to implement.&amp;nbsp; I am also not sure what you think the ~ symbol means.&amp;nbsp; Are you trying to use it as a substitute for the NOT operator?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Can you describe in words what situations lead to&amp;nbsp;&lt;SPAN&gt;EMail_OptIn = 1?&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;And what situations should lead to&amp;nbsp;EMail_OptIn = 0 &lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;and what situations should lead to&amp;nbsp;EMail_OptIn = ,&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Can you show the expected result for your example input?&lt;/SPAN&gt;&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;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 18 Jul 2023 16:33:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/if-else-then-do-statement/m-p/885311#M349816</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2023-07-18T16:33:39Z</dc:date>
    </item>
  </channel>
</rss>

