Search code examples
arrayssasmissing-data

SAS- setting missings to a range of columns based on the value of another variable


I currently have a dataset that includes an ID for each person, and then variables called day1 through day1826 that are binary indicators of availability of a drug on each of those days. I need to censor individuals on certain days. For example, if a person needs to be censored on day500, then I need day500 to be set to missing, as well as every day variable after that (i.e. day500 through day1826). I have a variable called time_for_censor that indicates what day to start the missings.

How can I code this in SAS?

I've tried to code it in a loop like this:

array daydummy (1826) day1-day1826; 
if time_for_censor ne . then do time_for_censor=1 to 1825; 
  daydummy(time_for_censor)=.; 
  daydummy(time_for_censor + 1) =.; 
end; 

Solution

  • Just loop from the censor date to the end of the array.

    array daydummy (1826) day1-day1826; 
    if not missing(time_for_censor) then do index=time_for_censor to 1826; 
      daydummy(index)=.; 
    end; 
    drop index;
    

    You might need to change the lower bound on the do loop to time_for_censor+1 depending on the whether the values are valid on the censoring date or not.