<?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: Need to create a person level data set from a visit level data set (derived variables help) in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Need-to-create-a-person-level-data-set-from-a-visit-level-data/m-p/709095#M217965</link>
    <description>&lt;P&gt;Make use of the "auto-remerge" of SAS SQL:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table want as
  select
    *,
    max(preg) as preg_person_level
  from have
  group by id
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;or use a data step with a double DO loop:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
preg_person_level = 0;
do until (last.id);
  set have;
  by id;
  if preg then preg_person_level = 1;
end;
do until (last.id);
  set have;
  by id;
  output;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sat, 02 Jan 2021 19:50:10 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2021-01-02T19:50:10Z</dc:date>
    <item>
      <title>Need to create a person level data set from a visit level data set (derived variables help)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-to-create-a-person-level-data-set-from-a-visit-level-data/m-p/709094#M217964</link>
      <description>&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am working on a data set which was provided to me at a cycle level. This means that an individual with the same ID can have more that one visit. I need to create a person level data set in which there is only one occurrence of the participant's ID in the data set. I created derived variables at the cycle level, and now I need to create a person level counterpart.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For example:&amp;nbsp;&lt;/P&gt;&lt;P&gt;I needed to create a yes/no variable determining if the patient was pregnant in any of the cycles. The person level counterpart would indicate whether the person was ever pregnant. How would you go about turning the yes/no variable into a person level variable?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I was thinking of doing something similar to the following, but it didn't work properly:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want (drop = preg_counter); 
	set have; 
	by id cycle; 
  	retain preg_counter .;
  if first.id then preg_counter = .;
  if PREG = 1 then do;
    preg_counter = sum(preg_counter,1);
    PREG_COUNT = preg_counter;
  end;
  if PREG_COUNT&amp;gt;=1 then PREG_PERSONLEVEL=1;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;to achieve a data set like:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;CYCLE&lt;/TD&gt;&lt;TD&gt;Preg&lt;/TD&gt;&lt;TD&gt;Preg_PERSONLEVEL&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Instead, this is produced, which is not helpful:&amp;nbsp;&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;CYCLE&lt;/TD&gt;&lt;TD&gt;Preg&lt;/TD&gt;&lt;TD&gt;Preg_PERSON LEVEL&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;After doing this, I would take the first ID for each patient to retain all of the relevant information in the person level data set. This solution may not be the best way to go about it, so any suggestions or help would be greatly appreciated.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you in advance for all of your help! If there is a solution that avoids the use of SQL, that would be optimal because I am very new to SQL.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Datalines used are as follows:&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have; 
	input id cycle preg; 
	datalines; 
	1 1 0
	1 2 1
	1 3 0
	2 1 0 
	2 2 0
	3 1 1
	4 1 1
	4 2 0
	4 3 1
; 
run; &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 02 Jan 2021 19:38:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-to-create-a-person-level-data-set-from-a-visit-level-data/m-p/709094#M217964</guid>
      <dc:creator>awardell</dc:creator>
      <dc:date>2021-01-02T19:38:25Z</dc:date>
    </item>
    <item>
      <title>Re: Need to create a person level data set from a visit level data set (derived variables help)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-to-create-a-person-level-data-set-from-a-visit-level-data/m-p/709095#M217965</link>
      <description>&lt;P&gt;Make use of the "auto-remerge" of SAS SQL:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table want as
  select
    *,
    max(preg) as preg_person_level
  from have
  group by id
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;or use a data step with a double DO loop:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
preg_person_level = 0;
do until (last.id);
  set have;
  by id;
  if preg then preg_person_level = 1;
end;
do until (last.id);
  set have;
  by id;
  output;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 02 Jan 2021 19:50:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-to-create-a-person-level-data-set-from-a-visit-level-data/m-p/709095#M217965</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2021-01-02T19:50:10Z</dc:date>
    </item>
    <item>
      <title>Re: Need to create a person level data set from a visit level data set (derived variables help)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-to-create-a-person-level-data-set-from-a-visit-level-data/m-p/709097#M217966</link>
      <description>Thank you so much! I didn't think about it that way!! I appreciate all of your help!</description>
      <pubDate>Sat, 02 Jan 2021 20:14:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-to-create-a-person-level-data-set-from-a-visit-level-data/m-p/709097#M217966</guid>
      <dc:creator>awardell</dc:creator>
      <dc:date>2021-01-02T20:14:32Z</dc:date>
    </item>
    <item>
      <title>Re: Need to create a person level data set from a visit level data set (derived variables help)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-to-create-a-person-level-data-set-from-a-visit-level-data/m-p/709099#M217967</link>
      <description>&lt;P&gt;If you don't want to use do loops, you can just use set, by, retain.&lt;/P&gt;&lt;P&gt;proc sort data=have;&lt;BR /&gt;by id;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data want;&lt;BR /&gt;set have;&lt;BR /&gt;by id;&lt;BR /&gt;retain preg_ever;&lt;BR /&gt;if first.id then do;&lt;BR /&gt;preg_ever=0;&lt;BR /&gt;end;&lt;BR /&gt;if preg=1 then preg_ever=1;&lt;BR /&gt;if last.id then output;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc print data=want;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I think this gets your desired results.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="lrackley_0-1609619785634.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/53181iFC76049E6D5E6ECE/image-size/medium?v=v2&amp;amp;px=400" role="button" title="lrackley_0-1609619785634.png" alt="lrackley_0-1609619785634.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 02 Jan 2021 20:36:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-to-create-a-person-level-data-set-from-a-visit-level-data/m-p/709099#M217967</guid>
      <dc:creator>tarheel13</dc:creator>
      <dc:date>2021-01-02T20:36:33Z</dc:date>
    </item>
  </channel>
</rss>

