<?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: ERROR: A character operand was found in the %EVAL function or %IF condition in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667387#M199843</link>
    <description>&lt;P&gt;Hi Kurt ,&lt;BR /&gt;&lt;BR /&gt;Numobs macro just gives a count of number of observations .and the value of &amp;amp;PLAN is given as M1 and M2&lt;/P&gt;&lt;P&gt;and for &amp;amp;W is mentioned as below in the code .&lt;/P&gt;&lt;P&gt;Here is the full code&lt;BR /&gt;Note : Error message is coming out to be like&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR: A character operand was found in the %EVAL function or %IF condition where&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = A&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;%LET W = 1;&lt;BR /&gt;DATA&lt;BR /&gt;USER.DBDTL3_&amp;amp;PLN&lt;BR /&gt;;&lt;BR /&gt;SET&lt;BR /&gt;DBDTL2_&amp;amp;PLN&lt;BR /&gt;;&lt;BR /&gt;%IF %NUMOBS(DBDTL2_&amp;amp;PLN) &amp;gt; 0 %THEN %DO;&lt;BR /&gt;%DO %WHILE (&amp;amp;W &amp;lt;= &amp;amp;CDDCNT) ;&lt;BR /&gt;%IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'A' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'F' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'M' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'O' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'Q' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'P' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/1000;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'G' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/10000;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'J' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/10000;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'H' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W=INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/1000000;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'OK' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W=INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/1000000;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'D' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W, YYMMDD10.);&lt;BR /&gt;FORMAT CDD_VL_&amp;amp;PLN._&amp;amp;W MMDDYY10.;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = CDD_TX_&amp;amp;PLN._&amp;amp;W ;&lt;BR /&gt;%END;&lt;BR /&gt;&lt;BR /&gt;%LET W = %EVAL(&amp;amp;W + 1 );&lt;BR /&gt;%END; %* End of DO WHILE LOOP;&lt;BR /&gt;%END; %* End of NUMOBS &amp;gt; 0 if statement ;&lt;BR /&gt;RUN&lt;BR /&gt;;&lt;/P&gt;</description>
    <pubDate>Tue, 07 Jul 2020 09:20:11 GMT</pubDate>
    <dc:creator>Nimish28</dc:creator>
    <dc:date>2020-07-07T09:20:11Z</dc:date>
    <item>
      <title>ERROR: A character operand was found in the %EVAL function or %IF condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667381#M199838</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to execute this Macro but the macro is hitting this error mentioned in the subject line . I have used this macro before as well and it worked fine .&lt;/P&gt;&lt;P&gt;Here is the macro code for reference&amp;nbsp;&lt;/P&gt;&lt;P&gt;%LET W = 1;&lt;BR /&gt;DATA&lt;BR /&gt;USER.DBDTL3_&amp;amp;PLN&lt;BR /&gt;;&lt;BR /&gt;SET&lt;BR /&gt;DBDTL2_&amp;amp;PLN&lt;BR /&gt;;&lt;BR /&gt;%IF %NUMOBS(DBDTL2_&amp;amp;PLN) &amp;gt; 0 %THEN %DO;&lt;BR /&gt;%DO %WHILE (&amp;amp;W &amp;lt;= &amp;amp;CDDCNT) ;&lt;BR /&gt;%IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'A' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Kindly help .&lt;/P&gt;</description>
      <pubDate>Tue, 07 Jul 2020 08:42:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667381#M199838</guid>
      <dc:creator>Nimish28</dc:creator>
      <dc:date>2020-07-07T08:42:14Z</dc:date>
    </item>
    <item>
      <title>Re: ERROR: A character operand was found in the %EVAL function or %IF condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667385#M199842</link>
      <description>&lt;P&gt;You have two %do statements, but only one %end. This will lead to a compilation error when you define the macro, so it can't ever have worked. Unless you posted incomplete code, which makes it harder for us to help you.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do the macro variables &amp;amp;&lt;SPAN&gt;CDD_FMT_xxx_yyy (xxx being the content of &amp;amp;PLN and yyy of &amp;amp;W) really contain the single quotes?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;How does the function-style macro %NUMOBS create its result value? I guess that it results in a non-numeric value in certain conditions. To check this, we need to see the&amp;nbsp;&lt;EM&gt;whole&lt;/EM&gt; code of this macro.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 07 Jul 2020 09:05:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667385#M199842</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-07-07T09:05:53Z</dc:date>
    </item>
    <item>
      <title>Re: ERROR: A character operand was found in the %EVAL function or %IF condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667387#M199843</link>
      <description>&lt;P&gt;Hi Kurt ,&lt;BR /&gt;&lt;BR /&gt;Numobs macro just gives a count of number of observations .and the value of &amp;amp;PLAN is given as M1 and M2&lt;/P&gt;&lt;P&gt;and for &amp;amp;W is mentioned as below in the code .&lt;/P&gt;&lt;P&gt;Here is the full code&lt;BR /&gt;Note : Error message is coming out to be like&amp;nbsp;&lt;/P&gt;&lt;P&gt;ERROR: A character operand was found in the %EVAL function or %IF condition where&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = A&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;%LET W = 1;&lt;BR /&gt;DATA&lt;BR /&gt;USER.DBDTL3_&amp;amp;PLN&lt;BR /&gt;;&lt;BR /&gt;SET&lt;BR /&gt;DBDTL2_&amp;amp;PLN&lt;BR /&gt;;&lt;BR /&gt;%IF %NUMOBS(DBDTL2_&amp;amp;PLN) &amp;gt; 0 %THEN %DO;&lt;BR /&gt;%DO %WHILE (&amp;amp;W &amp;lt;= &amp;amp;CDDCNT) ;&lt;BR /&gt;%IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'A' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'F' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'M' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'O' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'Q' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/100;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'P' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/1000;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'G' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/10000;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'J' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/10000;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'H' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W=INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/1000000;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'OK' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W=INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W,30.)/1000000;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %IF &amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W = 'D' %THEN %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = INPUT(CDD_TX_&amp;amp;PLN._&amp;amp;W, YYMMDD10.);&lt;BR /&gt;FORMAT CDD_VL_&amp;amp;PLN._&amp;amp;W MMDDYY10.;&lt;BR /&gt;%END;&lt;BR /&gt;%ELSE %DO;&lt;BR /&gt;CDD_VL_&amp;amp;PLN._&amp;amp;W = CDD_TX_&amp;amp;PLN._&amp;amp;W ;&lt;BR /&gt;%END;&lt;BR /&gt;&lt;BR /&gt;%LET W = %EVAL(&amp;amp;W + 1 );&lt;BR /&gt;%END; %* End of DO WHILE LOOP;&lt;BR /&gt;%END; %* End of NUMOBS &amp;gt; 0 if statement ;&lt;BR /&gt;RUN&lt;BR /&gt;;&lt;/P&gt;</description>
      <pubDate>Tue, 07 Jul 2020 09:20:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667387#M199843</guid>
      <dc:creator>Nimish28</dc:creator>
      <dc:date>2020-07-07T09:20:11Z</dc:date>
    </item>
    <item>
      <title>Re: ERROR: A character operand was found in the %EVAL function or %IF condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667396#M199847</link>
      <description>&lt;P&gt;So let's start with the contents of &amp;amp;&lt;SPAN&gt;CDD_FMT_M1_1, since you try to compare those with 'A'.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 07 Jul 2020 10:46:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667396#M199847</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-07-07T10:46:18Z</dc:date>
    </item>
    <item>
      <title>Re: ERROR: A character operand was found in the %EVAL function or %IF condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667418#M199858</link>
      <description>&lt;P&gt;It will also be interesting to see what %numobs does if the dataset does not exist or if it does not have any observations.&lt;/P&gt;</description>
      <pubDate>Tue, 07 Jul 2020 12:01:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667418#M199858</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-07-07T12:01:19Z</dc:date>
    </item>
    <item>
      <title>Re: ERROR: A character operand was found in the %EVAL function or %IF condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667448#M199868</link>
      <description>&lt;P&gt;Agree, if you add:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%put &amp;gt;&amp;gt;&amp;amp;&amp;amp;CDD_FMT_&amp;amp;PLN._&amp;amp;W&amp;lt;&amp;lt;;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;before the %IF statement what do you see?&lt;/P&gt;
&lt;P&gt;There are many values that could trigger that error, for example: AND OR +-=&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 07 Jul 2020 14:28:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667448#M199868</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2020-07-07T14:28:37Z</dc:date>
    </item>
    <item>
      <title>Re: ERROR: A character operand was found in the %EVAL function or %IF condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667465#M199877</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I think you can achieve what you want in a more readable way and with less problems by not using macros&lt;/P&gt;
&lt;P&gt;but plain SAS language.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is an example based on the code you've given, that you can adapt to your needs.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc format;
    invalue denom
    'A', 'F', 'M', 'O', 'Q'=100
    'P'=1000
    'G', 'J'=10000
    'H', 'OK'=100000
    other=0;
run; 

%let PLN=PLN;
%let CDD_FMT_&amp;amp;PLN._1=G;
%let CDD_FMT_&amp;amp;PLN._2=A;

data want;
    length CDD_FMT $2.;

    CDD_TX_PLN_1="5000"; /* For the example */
    CDD_TX_PLN_2="200";
    format CDD_VL_PLN_1 CDD_VL_PLN_2 best.;

    array TX CDD_TX_PLN:;
    array VL CDD_VL:;

    do W=1 to 2;
        CDD_FMT=symget(cats("CDD_FMT_&amp;amp;PLN._",W));
        denom=input(CDD_FMT, denom.);
        CDD_TX=input(TX(W),30.);

        if denom then VL(W)=CDD_TX/denom;
        else if CDD_FMT='D' then VL(W)= input(TX(W), YYMMDD10.);
        else VL(W)=CDD_TX;
    end;&lt;BR /&gt;    drop denom CDD_FMT;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 07 Jul 2020 15:11:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/ERROR-A-character-operand-was-found-in-the-EVAL-function-or-IF/m-p/667465#M199877</guid>
      <dc:creator>gamotte</dc:creator>
      <dc:date>2020-07-07T15:11:39Z</dc:date>
    </item>
  </channel>
</rss>

