<?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: Case when to comparing NULL values in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914679#M360432</link>
    <description>&lt;P&gt;In SAS, dates are NOT strings, unless someone fucked up big time. Dates are numbers.&lt;/P&gt;</description>
    <pubDate>Tue, 06 Feb 2024 13:14:18 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2024-02-06T13:14:18Z</dc:date>
    <item>
      <title>Case when to comparing NULL values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914663#M360425</link>
      <description>&lt;P&gt;Below case when is not working when both the fields discharge_date and admit_date is NULL. If the values of both the fields are NULL then I want to display it as NULL in the field ADMIT_DISCHARGE but it's showing as '1'. Any help to correct this CASE WHEN or would like to know how to simplify it using with any other ways in SQL?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Both discharge_date and admit_date is character datatype&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;SELECT DISCHARGE_DATE, ADMIT_DATE, 
CASE WHEN DISCHARGE_DATE IS NULL THEN NULL 
WHEN ADMIT_DATE IS NULL THEN NULL
WHEN DISCHARGE_DATE IS NULL AND ADMIT_DATE IS NULL THEN NULL
WHEN DISCHARGE_DATE = ADMIT_DATE THEN '1'
ELSE DISCHARGE_DATE - ADMIT_DATE END AS ADMIT_DISCHARGE&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 06 Feb 2024 11:31:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914663#M360425</guid>
      <dc:creator>Babloo</dc:creator>
      <dc:date>2024-02-06T11:31:28Z</dc:date>
    </item>
    <item>
      <title>Re: Case when to comparing NULL values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914665#M360427</link>
      <description>&lt;P&gt;Is this SQL done in a passthru to ORACLE or other data base? Or is it just plain SAS SQL?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Can you please provide sample data (even if it is fake) to illustrate the problem?&lt;/P&gt;</description>
      <pubDate>Tue, 06 Feb 2024 11:46:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914665#M360427</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2024-02-06T11:46:09Z</dc:date>
    </item>
    <item>
      <title>Re: Case when to comparing NULL values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914670#M360429</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;case
  when discharge_date = . or admit_date = . then .
  when discharge_date = admit_date and discharge_date ne . then 1 
  else discharge_date - admit_date
end as admit_discharge&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 06 Feb 2024 12:17:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914670#M360429</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2024-02-06T12:17:24Z</dc:date>
    </item>
    <item>
      <title>Re: Case when to comparing NULL values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914674#M360430</link>
      <description>Plain SAS SQL.&lt;BR /&gt;&lt;BR /&gt;May be it's an empty string both admit and discharge date fields causing&lt;BR /&gt;the issue.&lt;BR /&gt;</description>
      <pubDate>Tue, 06 Feb 2024 12:41:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914674#M360430</guid>
      <dc:creator>Babloo</dc:creator>
      <dc:date>2024-02-06T12:41:15Z</dc:date>
    </item>
    <item>
      <title>Re: Case when to comparing NULL values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914679#M360432</link>
      <description>&lt;P&gt;In SAS, dates are NOT strings, unless someone fucked up big time. Dates are numbers.&lt;/P&gt;</description>
      <pubDate>Tue, 06 Feb 2024 13:14:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914679#M360432</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2024-02-06T13:14:18Z</dc:date>
    </item>
    <item>
      <title>Re: Case when to comparing NULL values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914702#M360442</link>
      <description>&lt;P&gt;Hi!&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;You are mixing character and numeric assignments.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In one case when you have '1' and the other you are assigning it as&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;DISCHARGE_DATE - ADMIT_DAT&lt;/PRE&gt;&lt;P&gt;which is numeric.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Please check. You may just assign 1 instead of '1' here :&lt;/P&gt;&lt;PRE&gt;WHEN DISCHARGE_DATE = ADMIT_DATE THEN '1'&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 06 Feb 2024 14:53:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914702#M360442</guid>
      <dc:creator>rvikram</dc:creator>
      <dc:date>2024-02-06T14:53:17Z</dc:date>
    </item>
    <item>
      <title>Re: Case when to comparing NULL values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914712#M360446</link>
      <description>&lt;P&gt;SAS should tell you explicitly what is wrong.&lt;/P&gt;
&lt;P&gt;Let's try it.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input (admit_date discharge_date) (:date);
  format admit_date discharge_date date9.;
cards;
. .
. 01JAN2023
01JAN2023 .
01JAN2023 01JAN2023
01JAN2023 02JAN2023
;

proc sql;
select *
 , CASE WHEN DISCHARGE_DATE IS NULL THEN NULL 
        WHEN ADMIT_DATE IS NULL THEN NULL
        WHEN DISCHARGE_DATE IS NULL AND ADMIT_DATE IS NULL THEN NULL
        WHEN DISCHARGE_DATE = ADMIT_DATE THEN '1'
        ELSE DISCHARGE_DATE - ADMIT_DATE 
  END AS ADMIT_DISCHARGE
from have
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;191  proc sql;
192  select *
193   , CASE WHEN DISCHARGE_DATE IS NULL THEN NULL
194          WHEN ADMIT_DATE IS NULL THEN NULL
195          WHEN DISCHARGE_DATE IS NULL AND ADMIT_DATE IS NULL THEN NULL
196          WHEN DISCHARGE_DATE = ADMIT_DATE THEN '1'
197          ELSE DISCHARGE_DATE - ADMIT_DATE
198    END AS ADMIT_DISCHARGE
199  from have
200  ;
ERROR: Result of WHEN clause 5 is not the same data type as the preceding results.
ERROR: The following columns were not found in the contributing tables: ADMIT_DATE, DISCHARGE_DATE, NULL.
201  quit;
NOTE: The SAS System stopped processing this step because of errors.
&lt;/PRE&gt;
&lt;P&gt;So the first three WHEN generate NULL (which it probably not valid there. I suspect SAS is looking for a variable named NULL).&amp;nbsp; The fourth generates a character string.&amp;nbsp; And the fifth generates a number.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Change the NULL to the actual missing value you want. Change the '1' to just 1 so it is also a number.&amp;nbsp; (Note this means you cannot tell the different between a discharge on the same date and one where they are discharged the next day.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Let's make an example that demonstrates how you might want to do this.&amp;nbsp; Let's include some data with 1 day and 2 day stays. So data with invalid sequence of dates.&amp;nbsp; And let's include a variable named NULL so we can see what happens when trying the use NULL as a value instead of just a keyword.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input (admit_date discharge_date) (:date.);
  format admit_date discharge_date date9.;
  null=.n;
cards;
. .
. 01JAN2023
01JAN2023 .
01JAN2023 01JAN2023
01JAN2023 02JAN2023
02JAN2023 01JAN2023
;

proc sql;
select *
 , CASE WHEN DISCHARGE_DATE IS NULL THEN null 
        WHEN ADMIT_DATE IS NULL THEN null
        WHEN DISCHARGE_DATE &amp;gt;= ADMIT_DATE THEN (DISCHARGE_DATE - ADMIT_DATE)+1
        ELSE .E
  END AS ADMIT_DISCHARGE
from have
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Results&lt;/P&gt;
&lt;PRE&gt;              discharge_                  ADMIT_
admit_date          date      null     DISCHARGE
------------------------------------------------
         .             .         N             N
         .     01JAN2023         N             N
 01JAN2023             .         N             N
 01JAN2023     01JAN2023         N             1
 01JAN2023     02JAN2023         N             2
 02JAN2023     01JAN2023         N             E
&lt;/PRE&gt;
&lt;P&gt;Or perhaps you want to distinguish between all of the possible ways that that make it impossible to calculate length of stay.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
select *
 , CASE WHEN DISCHARGE_DATE IS NULL and ADMIT_DATE IS NULL THEN .B 
        WHEN DISCHARGE_DATE IS NULL THEN .D
        WHEN ADMIT_DATE IS NULL THEN .A
        WHEN DISCHARGE_DATE &amp;gt;= ADMIT_DATE THEN (DISCHARGE_DATE - ADMIT_DATE)+1
        ELSE .E
  END AS ADMIT_DISCHARGE
from have
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result&lt;/P&gt;
&lt;PRE&gt;              discharge_                  ADMIT_
admit_date          date      null     DISCHARGE
------------------------------------------------
         .             .         N             B
         .     01JAN2023         N             A
 01JAN2023             .         N             D
 01JAN2023     01JAN2023         N             1
 01JAN2023     02JAN2023         N             2
 02JAN2023     01JAN2023         N             E
&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;</description>
      <pubDate>Tue, 06 Feb 2024 16:14:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914712#M360446</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2024-02-06T16:14:18Z</dc:date>
    </item>
    <item>
      <title>Re: Case when to comparing NULL values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914713#M360447</link>
      <description>Do the fields have the word NULL or are they blank? I ask because you say they're character and want to display it as NULL but that's not really something SAS does, NULL in SAS is essentially blank/empty.</description>
      <pubDate>Tue, 06 Feb 2024 15:49:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Case-when-to-comparing-NULL-values/m-p/914713#M360447</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2024-02-06T15:49:22Z</dc:date>
    </item>
  </channel>
</rss>

