<?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: Adding lines to fill in missing values in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Adding-lines-to-fill-in-missing-values/m-p/856911#M338557</link>
    <description>&lt;P&gt;You have a better chance of getting an answer if you present the data that you have (and maybe also the output you want) as a datastep, e.g.:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input ID   Minutes Systolic Diastolic;
cards;
3  6  123  69
3 10  110  62
3 15  111  66
3 185 137 113
4 8   118  79
4 11  73   46
4 16  85   50
4 149 141 79
;run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I think that what you want can be accomplished like this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  by id;
  if not last.id then do;
    _P_=_N_+1;
    set have(keep=minutes rename=(minutes=_next_)) point=_P_;
    do minutes=minutes to _next_-1;
      output;
      end;
    end;
  else output;
  drop _:;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;- assuming that your WANT table is sorted by ID and MINUTES, as was your sample.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What it does: if this is not the last record for that ID, it reads the MINUTES variable from the next record (variable _NEXT_) and outputs for the whole period up to the next record. Else, it just outputs.&lt;/P&gt;</description>
    <pubDate>Thu, 02 Feb 2023 18:31:03 GMT</pubDate>
    <dc:creator>s_lassen</dc:creator>
    <dc:date>2023-02-02T18:31:03Z</dc:date>
    <item>
      <title>Adding lines to fill in missing values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Adding-lines-to-fill-in-missing-values/m-p/856889#M338554</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;I have a dataset like&amp;nbsp;this:&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; &amp;nbsp;Minutes Systolic Diastolic&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;6&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;123&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;69&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; 10&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 110&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;62&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; 15&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 111&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;66&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; 185&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;137&amp;nbsp; &amp;nbsp; &amp;nbsp; 113&lt;/P&gt;&lt;P&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;118&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 79&lt;/P&gt;&lt;P&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;73&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 46&lt;/P&gt;&lt;P&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 16&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 85&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 50&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;149&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;141&amp;nbsp; &amp;nbsp; &amp;nbsp; 79&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to take an average each day, and as you can see, there is a problem since measures are missing for certain days for certain participants. I am trying to add lines for the missing time periods and carry the previous values down until there is another measurement. In other words:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; &amp;nbsp;Minutes Systolic Diastolic&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;6&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;123&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;69&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;7&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;123&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;69&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;8&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;123&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;69&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;9&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;123&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;69&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; 10&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 110&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;62&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; 11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 110&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;62&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; 12&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 110&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;62&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; 13&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 110&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;62&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; 14&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 110&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;62&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; 15&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 111&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;66&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; 185&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;137&amp;nbsp; &amp;nbsp; &amp;nbsp; 113&lt;/P&gt;&lt;P&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;118&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 79&lt;/P&gt;&lt;P&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;118&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 79&lt;/P&gt;&lt;P&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 10&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;118&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 79&lt;/P&gt;&lt;P&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 11&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;73&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 46&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;4&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;149&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;141&amp;nbsp; &amp;nbsp; &amp;nbsp; 79&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Then I can calculate averages per day and rolling averages. There would be no line for ID 4 for 6 or 7 minutes because they start at minute 8, or after 149 minutes because that is the last measurement for that ID. I am unsure how to do this in a data step or proc SQL or if there is another proc that would be better. Any help would be much appreciated. Thank you!&lt;/P&gt;</description>
      <pubDate>Thu, 02 Feb 2023 17:01:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Adding-lines-to-fill-in-missing-values/m-p/856889#M338554</guid>
      <dc:creator>Nusseey144</dc:creator>
      <dc:date>2023-02-02T17:01:32Z</dc:date>
    </item>
    <item>
      <title>Re: Adding lines to fill in missing values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Adding-lines-to-fill-in-missing-values/m-p/856911#M338557</link>
      <description>&lt;P&gt;You have a better chance of getting an answer if you present the data that you have (and maybe also the output you want) as a datastep, e.g.:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input ID   Minutes Systolic Diastolic;
cards;
3  6  123  69
3 10  110  62
3 15  111  66
3 185 137 113
4 8   118  79
4 11  73   46
4 16  85   50
4 149 141 79
;run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I think that what you want can be accomplished like this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
  set have;
  by id;
  if not last.id then do;
    _P_=_N_+1;
    set have(keep=minutes rename=(minutes=_next_)) point=_P_;
    do minutes=minutes to _next_-1;
      output;
      end;
    end;
  else output;
  drop _:;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;- assuming that your WANT table is sorted by ID and MINUTES, as was your sample.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;What it does: if this is not the last record for that ID, it reads the MINUTES variable from the next record (variable _NEXT_) and outputs for the whole period up to the next record. Else, it just outputs.&lt;/P&gt;</description>
      <pubDate>Thu, 02 Feb 2023 18:31:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Adding-lines-to-fill-in-missing-values/m-p/856911#M338557</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2023-02-02T18:31:03Z</dc:date>
    </item>
  </channel>
</rss>

