<?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 Medicare data: comparing and combining diagnoses from multiple records in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Medicare-data-comparing-and-combining-diagnoses-from-multiple/m-p/984279#M379685</link>
    <description>&lt;P&gt;I’m working with Medicare data. There are tens of millions of beneficiaries, and each beneficiary can have multiple healthcare visits during the year. Each visit can have multiple records. The records fall into 2 general categories: claims (what was actually billed) and chart review (a doctor reviews the chart and adds &lt;EM&gt;or deletes &lt;/EM&gt;diagnoses). Each record has 25 diagnosis variables (DX1-DX25). There are usually only 2-3 diagnoses per record, but some visits do indeed use all 25 DX variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It is possible to have visits with claims records only. There were visits with chart review records only, but those were deleted in a previous step. In later steps, the diagnosis codes will be compared to lists of codes for various medical conditions, so we can identify beneficiaries who have each of these conditions. This is accomplished by loading the list of DX codes for each condition into a series of macro variables. An array is used to compare the list of codes in the macro variable to all 25 DX variables, and a flag for each condition is generated when there is a match.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But the goal here is to create a single record for each visit that has the final list of diagnoses after all chart review diagnoses have been added or removed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here are the basic steps:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Identify all the records from a visit using a unique identifier stored in a variable called stay_key.&lt;/LI&gt;
&lt;LI&gt;Select the claim record where CLM_FINL_ACTN_IND=”Y”. However, it’s not that simple. It is possible to have multiple claim records where CLM_FINL_ACTN_IND=”Y”. In that case, the highest CLM_CNTL_NUM is selected among these records. This is now the “base” record to which all chart review diagnoses are added or deleted. Note: only one claim record is selected. Diagnoses from other claim records are NOT added or deleted from the base record.&lt;/LI&gt;
&lt;LI&gt;IF CLM_MDCL_REC ^=8 in the chart review record, then the diagnosis codes listed in DX1-DX25 should be added to the base record. Then the chart review record can be dropped.&lt;/LI&gt;
&lt;LI&gt;IF CLM_MDCL_REC =8, then then the diagnosis codes listed in DX1-DX25 should be deleted from the base record. As before, the chart review record can then be dropped.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;One possible approach I thought of to add diagnoses from the chart review record is to run PROC SQL so that the file merges with itself. I could use Where statements to add DX vars from chart review records where CLM_MDCL_REC ^=8 to base record. However, this would expand it from 25 DX variables to 50 -- or more if there are multiple chart reviews to add. That could make the later array step take a long time. For this reason, it might be acceptable to keep the chart review(s) as a separate record. HOWEVER, when deleting diagnoses, all of the records would have to be checked.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For deleting diagnosis codes from chart review records where CLM_MDCL_REC =8, these codes could be loaded into a macro variable. Then an array could be used to compare macro variable to DX vars in base record. When match is found, set the DX variable in the base record containing that DX code to blank.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below is an example of how the data is laid out (although I added a blank line between visits to make it easier to read) and what the final output table should look like (again, without the blank line I added). And there is code to create the "have" table in SAS.&lt;/P&gt;
&lt;TABLE border="1" width="99.80601357904946%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD colspan="9" width="90.30067895247332%"&gt;HAVE&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;stay_key&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;CLM_FINL_ACTN_IND&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;CLM_CNTL_NUM&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;CLM_CHRT_RVW_SW&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;CLM_MDCL_REC&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;DX1&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;DX2&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;DX3&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;DX4&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-01/05/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;22571&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D218&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-01/05/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;22686&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D219&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-01/05/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;22989&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-01/05/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;30111&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;E348&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;31250&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D218&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;31585&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D219&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;F122&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;32622&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;32745&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;G585&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;32899&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;8&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;F122&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;32963&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;8&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D218&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colspan="9" width="90.30067895247332%"&gt;WANT&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;stay_key&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;CLM_FINL_ACTN_IND&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;CLM_CNTL_NUM&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;CLM_CHRT_RVW_SW&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;CLM_MDCL_REC&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;DX1&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;DX2&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;DX3&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;DX4&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;DX5&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;DX6&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-01/05/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;22989&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;E348&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;31585&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D219&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;G585&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines dsd dlm=',' truncover;
input stay_key	$ CLM_FINL_ACTN_IND $ CLM_CNTL_NUM CLM_CHRT_RVW_SW $	CLM_MDCL_REC DX1 $ DX2 $ DX3 $ DX4 $;
datalines;
1234-01/05/18 N 22571   D217 D218 D220 D221
1234-01/05/18 N 22686   D217 D219 D220 
1234-01/05/18 Y 22989   D217 D220 D221 
1234-01/05/18 N 30111 Y  E348        
1234-03/20/18 Y 31250   D217 D218 D220 D221
1234-03/20/18 Y 31585   D217 D219 D220 F122
1234-03/20/18 N 32622 Y  D217 D220 D221 
1234-03/20/18 N 32745 Y  G585   
1234-03/20/18 N 32899 Y 8 F122   
1234-03/20/18 N 32963 Y 8 D218
;RUN;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Mon, 02 Mar 2026 16:31:54 GMT</pubDate>
    <dc:creator>Wolverine</dc:creator>
    <dc:date>2026-03-02T16:31:54Z</dc:date>
    <item>
      <title>Medicare data: comparing and combining diagnoses from multiple records</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Medicare-data-comparing-and-combining-diagnoses-from-multiple/m-p/984279#M379685</link>
      <description>&lt;P&gt;I’m working with Medicare data. There are tens of millions of beneficiaries, and each beneficiary can have multiple healthcare visits during the year. Each visit can have multiple records. The records fall into 2 general categories: claims (what was actually billed) and chart review (a doctor reviews the chart and adds &lt;EM&gt;or deletes &lt;/EM&gt;diagnoses). Each record has 25 diagnosis variables (DX1-DX25). There are usually only 2-3 diagnoses per record, but some visits do indeed use all 25 DX variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It is possible to have visits with claims records only. There were visits with chart review records only, but those were deleted in a previous step. In later steps, the diagnosis codes will be compared to lists of codes for various medical conditions, so we can identify beneficiaries who have each of these conditions. This is accomplished by loading the list of DX codes for each condition into a series of macro variables. An array is used to compare the list of codes in the macro variable to all 25 DX variables, and a flag for each condition is generated when there is a match.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But the goal here is to create a single record for each visit that has the final list of diagnoses after all chart review diagnoses have been added or removed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here are the basic steps:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Identify all the records from a visit using a unique identifier stored in a variable called stay_key.&lt;/LI&gt;
&lt;LI&gt;Select the claim record where CLM_FINL_ACTN_IND=”Y”. However, it’s not that simple. It is possible to have multiple claim records where CLM_FINL_ACTN_IND=”Y”. In that case, the highest CLM_CNTL_NUM is selected among these records. This is now the “base” record to which all chart review diagnoses are added or deleted. Note: only one claim record is selected. Diagnoses from other claim records are NOT added or deleted from the base record.&lt;/LI&gt;
&lt;LI&gt;IF CLM_MDCL_REC ^=8 in the chart review record, then the diagnosis codes listed in DX1-DX25 should be added to the base record. Then the chart review record can be dropped.&lt;/LI&gt;
&lt;LI&gt;IF CLM_MDCL_REC =8, then then the diagnosis codes listed in DX1-DX25 should be deleted from the base record. As before, the chart review record can then be dropped.&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;One possible approach I thought of to add diagnoses from the chart review record is to run PROC SQL so that the file merges with itself. I could use Where statements to add DX vars from chart review records where CLM_MDCL_REC ^=8 to base record. However, this would expand it from 25 DX variables to 50 -- or more if there are multiple chart reviews to add. That could make the later array step take a long time. For this reason, it might be acceptable to keep the chart review(s) as a separate record. HOWEVER, when deleting diagnoses, all of the records would have to be checked.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For deleting diagnosis codes from chart review records where CLM_MDCL_REC =8, these codes could be loaded into a macro variable. Then an array could be used to compare macro variable to DX vars in base record. When match is found, set the DX variable in the base record containing that DX code to blank.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below is an example of how the data is laid out (although I added a blank line between visits to make it easier to read) and what the final output table should look like (again, without the blank line I added). And there is code to create the "have" table in SAS.&lt;/P&gt;
&lt;TABLE border="1" width="99.80601357904946%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD colspan="9" width="90.30067895247332%"&gt;HAVE&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;stay_key&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;CLM_FINL_ACTN_IND&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;CLM_CNTL_NUM&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;CLM_CHRT_RVW_SW&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;CLM_MDCL_REC&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;DX1&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;DX2&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;DX3&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;DX4&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-01/05/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;22571&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D218&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-01/05/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;22686&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D219&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-01/05/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;22989&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-01/05/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;30111&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;E348&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;31250&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D218&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;31585&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D219&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;F122&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;32622&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;32745&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;G585&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;32899&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;8&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;F122&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;N&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;32963&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;8&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D218&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD colspan="9" width="90.30067895247332%"&gt;WANT&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;stay_key&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;CLM_FINL_ACTN_IND&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;CLM_CNTL_NUM&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;CLM_CHRT_RVW_SW&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;CLM_MDCL_REC&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;DX1&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;DX2&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;DX3&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;DX4&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;DX5&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;DX6&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-01/05/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;22989&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;E348&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="11.54219204655674%"&gt;1234-03/20/18&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;Y&lt;/TD&gt;
&lt;TD width="13.288069835111543%"&gt;31585&lt;/TD&gt;
&lt;TD width="16.58583899127061%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="13.38506304558681%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D217&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D219&lt;/TD&gt;
&lt;TD width="4.849660523763336%"&gt;D220&lt;/TD&gt;
&lt;TD width="4.461687681862269%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;D221&lt;/TD&gt;
&lt;TD width="4.75266731328807%"&gt;G585&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines dsd dlm=',' truncover;
input stay_key	$ CLM_FINL_ACTN_IND $ CLM_CNTL_NUM CLM_CHRT_RVW_SW $	CLM_MDCL_REC DX1 $ DX2 $ DX3 $ DX4 $;
datalines;
1234-01/05/18 N 22571   D217 D218 D220 D221
1234-01/05/18 N 22686   D217 D219 D220 
1234-01/05/18 Y 22989   D217 D220 D221 
1234-01/05/18 N 30111 Y  E348        
1234-03/20/18 Y 31250   D217 D218 D220 D221
1234-03/20/18 Y 31585   D217 D219 D220 F122
1234-03/20/18 N 32622 Y  D217 D220 D221 
1234-03/20/18 N 32745 Y  G585   
1234-03/20/18 N 32899 Y 8 F122   
1234-03/20/18 N 32963 Y 8 D218
;RUN;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 02 Mar 2026 16:31:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Medicare-data-comparing-and-combining-diagnoses-from-multiple/m-p/984279#M379685</guid>
      <dc:creator>Wolverine</dc:creator>
      <dc:date>2026-03-02T16:31:54Z</dc:date>
    </item>
    <item>
      <title>Re: Medicare data: comparing and combining diagnoses from multiple records</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Medicare-data-comparing-and-combining-diagnoses-from-multiple/m-p/984306#M379689</link>
      <description>&lt;P&gt;You can try this - seems to work and produces what's in your 'want' dataset for those two records, but definitely not tested thoroughly.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards dsd dlm=',' truncover;
length stay_key $13 clm_finl_actn_ind $1 clm_cntl_num $5 
	clm_chrt_rvw_sw $1 clm_mdcl_rec $1 dx001-dx025 $4;
input stay_key clm_finl_actn_ind clm_cntl_num  
	clm_chrt_rvw_sw clm_mdcl_rec dx001-dx004;
cards;
1234-01/05/18,N,22571,,,D217,D218,D220,D221
1234-01/05/18,N,22686,,,D217,D219,D220,
1234-01/05/18,Y,22989,,,D217,D220,D221,
1234-01/05/18,N,30111,Y,,E348,,,,,,,,
1234-03/20/18,Y,31250,,,D217,D218,D220,D221
1234-03/20/18,Y,31585,,,D217,D219,D220,F122
1234-03/20/18,N,32622,Y,,D217,D220,D221,
1234-03/20/18,N,32745,Y,,G585,,,
1234-03/20/18,N,32899,Y,8,F122,,,
1234-03/20/18,N,32963,Y,8,D218,,,
;
RUN;

proc sort data=have;
by
	stay_key
	DESCENDING clm_chrt_rvw_sw
	clm_finl_actn_ind
	clm_cntl_num
	;
run;

data want;
set have;
by
	stay_key
	DESCENDING clm_chrt_rvw_sw
	clm_finl_actn_ind
	clm_cntl_num
	;
array rm {100} $4 _temporary_;
array ad {100} $4 _temporary_;
length dx026-dx100 $4;  * for adding extra dx from other records ;
array dx {*} dx001-dx025; * for any given existing record, only look at 1-25 ;
array kp {100} $4 _temporary_;
if first.stay_key then call missing(of rm[*], of ad[*], of kp[*], rmnum, adnum, kpnum);
if clm_chrt_rvw_sw="Y" then do;
	* chart review record? ;
	if clm_mdcl_rec="8" then do;
		* dx to remove ;
		do i=1 to dim(dx);
			if missing(dx[i]) then leave;
			if dx[i] not in rm then do;
				rmnum+1;
				rm[rmnum]=dx[i];
			end;
		end;
	end;
	else do;
		* dx to add ;
		do i=1 to dim(dx);
			if missing(dx[i]) then leave;
			if dx[i] not in ad then do;
				adnum+1;
				ad[adnum]=dx[i];
			end;
		end;
	end;
end;
else if last.stay_key and clm_finl_actn_ind="Y" then do;
	* this is the base record -- add / remove stuff based on chart review, then output ;
	do i=1 to dim(dx);
		* gather up the existing dx from the base record as long as not in rm list ;
		if missing(dx[i]) then leave;
		if dx[i] not in rm then do;
			kpnum+1;
			kp[kpnum]=dx[i];
		end;
	end;
	call missing(of dx[*]); * empty the existing dx array for now ;
	i=0;
	do while (i&amp;lt;kpnum);
		* write out the base row dx that were not removed ;
		i+1;
		dx[i]=kp[i];
	end;
	j=0; * note that i does not get reset ;
	do while (j&amp;lt;adnum);
		* now add anything from the add list (chart rvw recs ^= 8) ;
		j+1;
		if ad[j] not in rm and ad[j] not in kp then do; * make sure add-list dx is not also in rm list ;
			i+1;
			dx[i]=ad[j];  * note: i, j ;
		end;
	end;
	output;
end;
drop rmnum adnum kpnum i j;
run;

proc print data=want (drop=dx016-dx100); run;  * just showing dx1-15 here ;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 03 Mar 2026 03:19:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Medicare-data-comparing-and-combining-diagnoses-from-multiple/m-p/984306#M379689</guid>
      <dc:creator>quickbluefish</dc:creator>
      <dc:date>2026-03-03T03:19:06Z</dc:date>
    </item>
  </channel>
</rss>

