<?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: create missing ids and  to retain the previous value in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28486#M5254</link>
    <description>Yes.I also get it.But Patrick's code is more clever about rename origin variable.&lt;BR /&gt;
[pre]&lt;BR /&gt;
data test;&lt;BR /&gt;
 input age $ surmos survival;&lt;BR /&gt;
datalines;&lt;BR /&gt;
G1 0 0.1&lt;BR /&gt;
G1 1 0.2&lt;BR /&gt;
G1 3 0.6&lt;BR /&gt;
G1 6 0.12&lt;BR /&gt;
G2 0 0.01&lt;BR /&gt;
G2 1 0.6&lt;BR /&gt;
G2 5 0.12&lt;BR /&gt;
G2 6 0.33&lt;BR /&gt;
G2 10 0.88&lt;BR /&gt;
;&lt;BR /&gt;
run;&lt;BR /&gt;
data temp;&lt;BR /&gt;
 set test;&lt;BR /&gt;
 retain _surmos  _survival;&lt;BR /&gt;
 if age ne lag(age) then _surmos = surmos;&lt;BR /&gt;
 _surmos+1;&lt;BR /&gt;
 if _surmos lt surmos then do; &lt;BR /&gt;
                             do while(_surmos lt surmos);&lt;BR /&gt;
							  output;&lt;BR /&gt;
							  _surmos+1;&lt;BR /&gt;
							  end;&lt;BR /&gt;
							end;&lt;BR /&gt;
 _survival=survival; _surmos=surmos;&lt;BR /&gt;
 drop survival surmos;&lt;BR /&gt;
 output;&lt;BR /&gt;
run;&lt;BR /&gt;
proc print noobs;&lt;BR /&gt;
run;&lt;BR /&gt;
[/pre]&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Ksharp</description>
    <pubDate>Tue, 09 Nov 2010 07:23:13 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2010-11-09T07:23:13Z</dc:date>
    <item>
      <title>create missing ids and  to retain the previous value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28482#M5250</link>
      <description>I am trying to manipulate the output dataset  from survival analysis (used Proc LifeTest).  Below is the layout  of my output. I have 13 age groups, survival months (0 to n), probability values. The survival months column has two problems: (1) it has missing months e.g. age &amp;lt;13 has 0-5 then 7-9 and so on (2) n is not constant for all age groups.&lt;BR /&gt;
&lt;BR /&gt;
AGE	SURMOS	SURVIVAL&lt;BR /&gt;
G1	0	0.1&lt;BR /&gt;
G1	1	0.2&lt;BR /&gt;
G1	3	0.6&lt;BR /&gt;
G1	6	0.12&lt;BR /&gt;
G2	0	0.01&lt;BR /&gt;
G2	1	0.6&lt;BR /&gt;
G2	5	0.12&lt;BR /&gt;
G2	6	0.33&lt;BR /&gt;
G2	10	0.88&lt;BR /&gt;
&lt;BR /&gt;
I am trying to create a dataset (1) with 0 to n months (whatever is maximum for that particular age group) without missing for all age groups (2) to use the previous row value for probability for the missing. Below if the desired output I am trying to achieve.&lt;BR /&gt;
&lt;BR /&gt;
AGE	SURMOS	SURVIVAL&lt;BR /&gt;
G1	0	0.1&lt;BR /&gt;
G1	1	0.2&lt;BR /&gt;
G1	2	0.2&lt;BR /&gt;
G1	3	0.6&lt;BR /&gt;
G1	4	0.6&lt;BR /&gt;
G1	5	0.6&lt;BR /&gt;
G1	6	0.12&lt;BR /&gt;
G2	0	0.01&lt;BR /&gt;
G2	1	0.6&lt;BR /&gt;
G2	2	0.6&lt;BR /&gt;
G2	3	0.6&lt;BR /&gt;
G2	4	0.6&lt;BR /&gt;
G2	5	0.12&lt;BR /&gt;
G2	6	0.33&lt;BR /&gt;
G2	7	0.33&lt;BR /&gt;
G2	8	0.33&lt;BR /&gt;
G2	9	0.33&lt;BR /&gt;
G2	10	0.88</description>
      <pubDate>Thu, 04 Nov 2010 13:45:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28482#M5250</guid>
      <dc:creator>rsva</dc:creator>
      <dc:date>2010-11-04T13:45:25Z</dc:date>
    </item>
    <item>
      <title>Re: create missing ids and  to retain the previous value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28483#M5251</link>
      <description>You could try something like this.&lt;BR /&gt;
&lt;BR /&gt;
[pre]&lt;BR /&gt;
data test;&lt;BR /&gt;
 input age $ surmos survival;&lt;BR /&gt;
datalines;&lt;BR /&gt;
G1 0 0.1&lt;BR /&gt;
G1 1 0.2&lt;BR /&gt;
G1 3 0.6&lt;BR /&gt;
G1 6 0.12&lt;BR /&gt;
G2 0 0.01&lt;BR /&gt;
G2 1 0.6&lt;BR /&gt;
G2 5 0.12&lt;BR /&gt;
G2 6 0.33&lt;BR /&gt;
G2 10 0.88&lt;BR /&gt;
;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
proc sort data=test;&lt;BR /&gt;
 by age surmos;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
data test2 (keep = age surmos survival);&lt;BR /&gt;
 set test;&lt;BR /&gt;
 by age;&lt;BR /&gt;
 retain last_surmos last_survival;&lt;BR /&gt;
 if first.age then do;&lt;BR /&gt;
  output;&lt;BR /&gt;
  last_surmos = surmos;&lt;BR /&gt;
  last_survival = survival;&lt;BR /&gt;
 end;&lt;BR /&gt;
 else do;&lt;BR /&gt;
  if ((surmos - last_surmos) LE 1) then do;&lt;BR /&gt;
   output;&lt;BR /&gt;
   last_surmos = surmos;&lt;BR /&gt;
   last_survival = survival;&lt;BR /&gt;
  end;&lt;BR /&gt;
  else do;&lt;BR /&gt;
   current_surmos = surmos;&lt;BR /&gt;
   current_survival = survival;&lt;BR /&gt;
   do i = (last_surmos + 1) to (surmos - 1);&lt;BR /&gt;
    last_surmos = last_surmos + 1;&lt;BR /&gt;
    surmos = last_surmos;&lt;BR /&gt;
    survival = last_survival;&lt;BR /&gt;
    output;&lt;BR /&gt;
   end;&lt;BR /&gt;
   surmos = current_surmos;&lt;BR /&gt;
   survival = current_survival;&lt;BR /&gt;
   output;&lt;BR /&gt;
   last_surmos = surmos;&lt;BR /&gt;
   last_survival = survival;&lt;BR /&gt;
  end;&lt;BR /&gt;
 end;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
[/pre]

Message was edited by: Daryl</description>
      <pubDate>Thu, 04 Nov 2010 15:06:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28483#M5251</guid>
      <dc:creator>Daryl</dc:creator>
      <dc:date>2010-11-04T15:06:08Z</dc:date>
    </item>
    <item>
      <title>Re: create missing ids and  to retain the previous value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28484#M5252</link>
      <description>Thanks Daryl. Will try it.</description>
      <pubDate>Thu, 04 Nov 2010 15:46:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28484#M5252</guid>
      <dc:creator>rsva</dc:creator>
      <dc:date>2010-11-04T15:46:14Z</dc:date>
    </item>
    <item>
      <title>Re: create missing ids and  to retain the previous value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28485#M5253</link>
      <description>Hi&lt;BR /&gt;
&lt;BR /&gt;
Same result just a bit a different coding approach taken in the data step:&lt;BR /&gt;
&lt;BR /&gt;
data have;&lt;BR /&gt;
  input age $ surmos survival;&lt;BR /&gt;
datalines;&lt;BR /&gt;
G1 0 0.1&lt;BR /&gt;
G1 1 0.2&lt;BR /&gt;
G1 3 0.6&lt;BR /&gt;
G1 6 0.12&lt;BR /&gt;
G2 0 0.01&lt;BR /&gt;
G2 1 0.6&lt;BR /&gt;
G2 5 0.12&lt;BR /&gt;
G2 6 0.33&lt;BR /&gt;
G2 10 0.88&lt;BR /&gt;
;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
proc sort data=have;&lt;BR /&gt;
  by age surmos;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
data want(drop=HaveSurmos LagSurvival HaveSurvival);&lt;BR /&gt;
  set have(rename=(surmos=HaveSurmos survival=HaveSurvival));&lt;BR /&gt;
  by age;&lt;BR /&gt;
&lt;BR /&gt;
  LagSurvival= lag(HaveSurvival);&lt;BR /&gt;
&lt;BR /&gt;
  if first.age then Surmos=HaveSurmos;&lt;BR /&gt;
&lt;BR /&gt;
  do while(Surmos le HaveSurmos);&lt;BR /&gt;
    if Surmos = HaveSurmos then survival=HaveSurvival;&lt;BR /&gt;
    else survival=LagSurvival;&lt;BR /&gt;
    output;&lt;BR /&gt;
    Surmos+1;&lt;BR /&gt;
  end;&lt;BR /&gt;
&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
proc print data=want;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
HTH&lt;BR /&gt;
Patrick&lt;BR /&gt;
&lt;BR /&gt;
Message was edited by: Patrick</description>
      <pubDate>Fri, 05 Nov 2010 21:00:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28485#M5253</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2010-11-05T21:00:13Z</dc:date>
    </item>
    <item>
      <title>Re: create missing ids and  to retain the previous value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28486#M5254</link>
      <description>Yes.I also get it.But Patrick's code is more clever about rename origin variable.&lt;BR /&gt;
[pre]&lt;BR /&gt;
data test;&lt;BR /&gt;
 input age $ surmos survival;&lt;BR /&gt;
datalines;&lt;BR /&gt;
G1 0 0.1&lt;BR /&gt;
G1 1 0.2&lt;BR /&gt;
G1 3 0.6&lt;BR /&gt;
G1 6 0.12&lt;BR /&gt;
G2 0 0.01&lt;BR /&gt;
G2 1 0.6&lt;BR /&gt;
G2 5 0.12&lt;BR /&gt;
G2 6 0.33&lt;BR /&gt;
G2 10 0.88&lt;BR /&gt;
;&lt;BR /&gt;
run;&lt;BR /&gt;
data temp;&lt;BR /&gt;
 set test;&lt;BR /&gt;
 retain _surmos  _survival;&lt;BR /&gt;
 if age ne lag(age) then _surmos = surmos;&lt;BR /&gt;
 _surmos+1;&lt;BR /&gt;
 if _surmos lt surmos then do; &lt;BR /&gt;
                             do while(_surmos lt surmos);&lt;BR /&gt;
							  output;&lt;BR /&gt;
							  _surmos+1;&lt;BR /&gt;
							  end;&lt;BR /&gt;
							end;&lt;BR /&gt;
 _survival=survival; _surmos=surmos;&lt;BR /&gt;
 drop survival surmos;&lt;BR /&gt;
 output;&lt;BR /&gt;
run;&lt;BR /&gt;
proc print noobs;&lt;BR /&gt;
run;&lt;BR /&gt;
[/pre]&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
Ksharp</description>
      <pubDate>Tue, 09 Nov 2010 07:23:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28486#M5254</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2010-11-09T07:23:13Z</dc:date>
    </item>
    <item>
      <title>Re: create missing ids and  to retain the previous value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28487#M5255</link>
      <description>Thanks to all who responded. Below is another alternative solution.&lt;BR /&gt;
&lt;BR /&gt;
data test;&lt;BR /&gt;
input age $ surmos survival;&lt;BR /&gt;
datalines;&lt;BR /&gt;
G1 0 0.1&lt;BR /&gt;
G1 1 0.2&lt;BR /&gt;
G1 3 0.6&lt;BR /&gt;
G1 6 0.12&lt;BR /&gt;
G2 0 0.01&lt;BR /&gt;
G2 1 0.6&lt;BR /&gt;
G2 5 0.12&lt;BR /&gt;
G2 6 0.33&lt;BR /&gt;
G2 10 0.88&lt;BR /&gt;
;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
proc sort data=	TEST; by  AGE  ; run; &lt;BR /&gt;
&lt;BR /&gt;
/*gives max. survival months for each group variables*/&lt;BR /&gt;
proc means  data=outs noprint max ;&lt;BR /&gt;
 	by AGE  ; &lt;BR /&gt;
 	var surmos ;&lt;BR /&gt;
	where _censor_=0;&lt;BR /&gt;
 	output  out= maxmos(drop=_type_ _freq_) max = maxmos ;&lt;BR /&gt;
run ;&lt;BR /&gt;
&lt;BR /&gt;
/*adds missing months for each level in the group variable*/&lt;BR /&gt;
data temp1;&lt;BR /&gt;
set maxmos;&lt;BR /&gt;
if maxmos=0.5 then do;&lt;BR /&gt;
	surmos=0; output;&lt;BR /&gt;
	surmos=maxmos; output;&lt;BR /&gt;
			end;&lt;BR /&gt;
else do;&lt;BR /&gt;
surmos=0; output;&lt;BR /&gt;
surmos=0.5; output;&lt;BR /&gt;
do surmos= 1 to maxmos; output;&lt;BR /&gt;
	end;&lt;BR /&gt;
  end;&lt;BR /&gt;
	drop maxmos;&lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
proc sort data=temp1;&lt;BR /&gt;
by AGE  surmos; &lt;BR /&gt;
run;&lt;BR /&gt;
&lt;BR /&gt;
data temp2;&lt;BR /&gt;
	merge temp1  outs;&lt;BR /&gt;
	by AGE  surmos; &lt;BR /&gt;
&lt;BR /&gt;
	retain s1 ;&lt;BR /&gt;
		if surmos=0 then do;&lt;BR /&gt;
			s1=1; slcl=1; sucl=1; end;&lt;BR /&gt;
&lt;BR /&gt;
		else if survival ne . then do;&lt;BR /&gt;
			s1=survival; &lt;BR /&gt;
		end;&lt;BR /&gt;
		run;</description>
      <pubDate>Tue, 09 Nov 2010 17:48:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28487#M5255</guid>
      <dc:creator>rsva</dc:creator>
      <dc:date>2010-11-09T17:48:24Z</dc:date>
    </item>
    <item>
      <title>Re: create missing ids and  to retain the previous value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28488#M5256</link>
      <description>I think all you need is to look ahead to the next SURMOS.&lt;BR /&gt;
&lt;BR /&gt;
[pre]&lt;BR /&gt;
data test;&lt;BR /&gt;
   input age $ surmos survival;&lt;BR /&gt;
   datalines;&lt;BR /&gt;
G1 0 0.1&lt;BR /&gt;
G1 1 0.2&lt;BR /&gt;
G1 3 0.6&lt;BR /&gt;
G1 6 0.12&lt;BR /&gt;
G2 0 0.01&lt;BR /&gt;
G2 1 0.6&lt;BR /&gt;
G2 5 0.12&lt;BR /&gt;
G2 6 0.33&lt;BR /&gt;
G2 10 0.88&lt;BR /&gt;
;;;;&lt;BR /&gt;
   run;&lt;BR /&gt;
data new;&lt;BR /&gt;
   set test end=eof;&lt;BR /&gt;
   by age;&lt;BR /&gt;
   if not eof then  set test(firstobs=2 keep=surmos rename=(surmos=nxs));&lt;BR /&gt;
   drop nxs;&lt;BR /&gt;
   if not last.age then do;&lt;BR /&gt;
      do surmos=surmos to nxs-1;&lt;BR /&gt;
         output;&lt;BR /&gt;
         end;&lt;BR /&gt;
      end;&lt;BR /&gt;
   else output;&lt;BR /&gt;
   run;&lt;BR /&gt;
proc print;&lt;BR /&gt;
   run;&lt;BR /&gt;
[/pre]</description>
      <pubDate>Tue, 09 Nov 2010 19:13:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/create-missing-ids-and-to-retain-the-previous-value/m-p/28488#M5256</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2010-11-09T19:13:16Z</dc:date>
    </item>
  </channel>
</rss>

