<?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: How to use Loops in Data manipulation in SAS - creating new columns in SAS Enterprise Guide</title>
    <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-use-Loops-in-Data-manipulation-in-SAS-creating-new/m-p/315506#M21286</link>
    <description>Thanks Kurt,&lt;BR /&gt;&lt;BR /&gt;Only check in the above is, we need to use:&lt;BR /&gt;diadiff = lag(dia) - dia;&lt;BR /&gt;&lt;BR /&gt;Otherwise the results will be negative numbers, if we use below:&lt;BR /&gt;diadiff = dia - lag(dia);</description>
    <pubDate>Wed, 30 Nov 2016 12:56:04 GMT</pubDate>
    <dc:creator>imanojkumar1</dc:creator>
    <dc:date>2016-11-30T12:56:04Z</dc:date>
    <item>
      <title>How to use Loops in Data manipulation in SAS - creating new columns</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-use-Loops-in-Data-manipulation-in-SAS-creating-new/m-p/315468#M21283</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;First of all I must thankful to everyone there who kept helping me to learn SAS fast. Almost a month ago, I was zero with SAS but now, at least I am feeling confident and have grown my love towards it. &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Now, to my problem...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Suppose I have the following dataset:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  infile cards truncover expandtabs;
  input MC $ ET $ Date :Date9. Time :time8. Dia KMs;
  format Date date9. Time time8.;
cards;
US0001 Lath 12JAN15 7:00 890.8 2900334.00000
US000328 Lath 13JUL15 0:00 890.2 2232830.00000
US000328 Lath 02JAN16 0:00 885.9 2310299.00000
US000328 Lath 13JUN16 0:00 881.4 2450616.00000
US000329 Lath 12JAN15 0:00 885.7 2235626.00000
US000329 Lath 30MAY15 0:00 880.6 2373070.00000
US000329 Lath 14JAN16 0:00 872.6 2558987.00000
US000329 Lath 05AUG16 0:00 863.1 2740207.00000
US000331 Lath 13JUN15 0:00 860.7 2689105.00000
US000331 Lath 12JUN16 0:00 860.7 2730534.00000
US000334 Lath 02JUL15 0:00 859.6 3034370.00000
US000334 Lath 24JAN16 0:00 853.2 3230211.00000
US000334 Lath 27AUG16 0:00 845.9 3411050.00000
US000335 Lath 17MAR15 0:00 847.3 2183273.00000
US000335 Lath 15JAN16 0:00 847.3 2258321.00000
US000335 Lath 05AUG16 0:00 841.9 2438931.00000
US000336 Lath 16MAR15 0:00 853.6 2365989.00000
US000336 Lath 02MAY15 0:00 850.6 2405547.00000
US000336 Lath 28JAN16 0:00 846.3 2522017.00000
US000336 Lath 14MAR16 0:00 839.2 2554822.00000
;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What I want to do, is that for each MC above:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1.&amp;nbsp; Calculate Dia difference in such a way that if there is only one row, keep the dia otherwise DiaDiff = Dia in current row - Dia in previous row (please Note: for practice, I used Case When Else option here, but you still can be better than me, I am sure)&lt;/P&gt;&lt;P&gt;2. If DiaDiff = Dia in that row, Dia_Flag = 0, otherwise =1&lt;/P&gt;&lt;P&gt;3. Difference between the Days in two rows. If first row, DaysDiff = 0, otherwise DaysDiff = Date in current row - Date in previous row&lt;/P&gt;&lt;P&gt;4. Similary for KMs Difference. If first row, KM_Diff = 0, otherwise KM_Diff = KMs in current row - KMs in previous row&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And result would look like something below:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;MC&lt;/TD&gt;&lt;TD&gt;ET&lt;/TD&gt;&lt;TD&gt;Date&lt;/TD&gt;&lt;TD&gt;Time&lt;/TD&gt;&lt;TD&gt;Dia&lt;/TD&gt;&lt;TD&gt;KMs&lt;/TD&gt;&lt;TD&gt;DiaDiff&lt;/TD&gt;&lt;TD&gt;Dia_Flag&lt;/TD&gt;&lt;TD&gt;DaysDiff&lt;/TD&gt;&lt;TD&gt;KM_Diff&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US0001&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;12Jan2015&lt;/TD&gt;&lt;TD&gt;7:00:00&lt;/TD&gt;&lt;TD&gt;890,8&lt;/TD&gt;&lt;TD&gt;2900334&lt;/TD&gt;&lt;TD&gt;890,8&lt;/TD&gt;&lt;TD&gt;0&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;US000328&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;13Jul2015&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;890,2&lt;/TD&gt;&lt;TD&gt;2232830&lt;/TD&gt;&lt;TD&gt;890,2&lt;/TD&gt;&lt;TD&gt;0&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;US000328&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;02Jan2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;885,9&lt;/TD&gt;&lt;TD&gt;2310299&lt;/TD&gt;&lt;TD&gt;4,3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;173&lt;/TD&gt;&lt;TD&gt;77469&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000328&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;13Jun2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;881,4&lt;/TD&gt;&lt;TD&gt;2450616&lt;/TD&gt;&lt;TD&gt;4,5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;163&lt;/TD&gt;&lt;TD&gt;140317&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000329&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;12Jan2015&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;885,7&lt;/TD&gt;&lt;TD&gt;2235626&lt;/TD&gt;&lt;TD&gt;885,7&lt;/TD&gt;&lt;TD&gt;0&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;US000329&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;30May2015&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;880,6&lt;/TD&gt;&lt;TD&gt;2373070&lt;/TD&gt;&lt;TD&gt;5,1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;138&lt;/TD&gt;&lt;TD&gt;137444&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000329&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;14Jan2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;872,6&lt;/TD&gt;&lt;TD&gt;2558987&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;229&lt;/TD&gt;&lt;TD&gt;185917&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000329&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;05Aug2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;863,1&lt;/TD&gt;&lt;TD&gt;2740207&lt;/TD&gt;&lt;TD&gt;9,5&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;204&lt;/TD&gt;&lt;TD&gt;181220&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000331&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;13Jun2015&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;860,7&lt;/TD&gt;&lt;TD&gt;2689105&lt;/TD&gt;&lt;TD&gt;860,7&lt;/TD&gt;&lt;TD&gt;0&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;US000331&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;12Jun2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;860,7&lt;/TD&gt;&lt;TD&gt;2730534&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;365&lt;/TD&gt;&lt;TD&gt;41429&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000334&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;02Jul2015&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;859,6&lt;/TD&gt;&lt;TD&gt;3034370&lt;/TD&gt;&lt;TD&gt;1,1&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;US000334&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;24Jan2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;853,2&lt;/TD&gt;&lt;TD&gt;3230211&lt;/TD&gt;&lt;TD&gt;6,4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;206&lt;/TD&gt;&lt;TD&gt;195841&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000334&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;27Aug2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;845,9&lt;/TD&gt;&lt;TD&gt;3411050&lt;/TD&gt;&lt;TD&gt;7,3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;216&lt;/TD&gt;&lt;TD&gt;180839&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000335&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;17Mar2015&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;847,3&lt;/TD&gt;&lt;TD&gt;2183273&lt;/TD&gt;&lt;TD&gt;847,3&lt;/TD&gt;&lt;TD&gt;0&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;US000335&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;15Jan2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;847,3&lt;/TD&gt;&lt;TD&gt;2258321&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;304&lt;/TD&gt;&lt;TD&gt;75048&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000335&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;05Aug2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;841,9&lt;/TD&gt;&lt;TD&gt;2438931&lt;/TD&gt;&lt;TD&gt;5,4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;203&lt;/TD&gt;&lt;TD&gt;180610&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000336&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;16Mar2015&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;853,6&lt;/TD&gt;&lt;TD&gt;2365989&lt;/TD&gt;&lt;TD&gt;853,6&lt;/TD&gt;&lt;TD&gt;0&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;US000336&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;02May2015&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;850,6&lt;/TD&gt;&lt;TD&gt;2405547&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;47&lt;/TD&gt;&lt;TD&gt;39558&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000336&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;28Jan2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;846,3&lt;/TD&gt;&lt;TD&gt;2522017&lt;/TD&gt;&lt;TD&gt;4,3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;271&lt;/TD&gt;&lt;TD&gt;116470&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;US000336&lt;/TD&gt;&lt;TD&gt;Lath&lt;/TD&gt;&lt;TD&gt;14Mar2016&lt;/TD&gt;&lt;TD&gt;0:00:00&lt;/TD&gt;&lt;TD&gt;839,2&lt;/TD&gt;&lt;TD&gt;2554822&lt;/TD&gt;&lt;TD&gt;7,1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;46&lt;/TD&gt;&lt;TD&gt;32805&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Currently I am learning loops and hence this case.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;</description>
      <pubDate>Wed, 30 Nov 2016 11:13:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-use-Loops-in-Data-manipulation-in-SAS-creating-new/m-p/315468#M21283</guid>
      <dc:creator>imanojkumar1</dc:creator>
      <dc:date>2016-11-30T11:13:43Z</dc:date>
    </item>
    <item>
      <title>Re: How to use Loops in Data manipulation in SAS - creating new columns</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-use-Loops-in-Data-manipulation-in-SAS-creating-new/m-p/315476#M21284</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Whilst I don't have time to do all that for you, some tips to get you started:&lt;/P&gt;
&lt;P&gt;Use a datastep with a by group.&lt;/P&gt;
&lt;P&gt;Use lag&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;E.g.&lt;/P&gt;
&lt;PRE&gt;data want;
  set have;
  by mc;
  retain diadiff dia_flag daysdiff km_diff;
  if first.mc then do;
    diadiff=dia;
    dia=0;
    ...;
  end;
  else do;
    dia_flag=1;
    daysdiff=date-lag(date);
    ...;
  end;
run;&lt;/PRE&gt;
&lt;P&gt;Note, I will repeat, its not a good idea to call variables type names e.g. date or time.&lt;/P&gt;</description>
      <pubDate>Wed, 30 Nov 2016 11:25:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-use-Loops-in-Data-manipulation-in-SAS-creating-new/m-p/315476#M21284</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2016-11-30T11:25:15Z</dc:date>
    </item>
    <item>
      <title>Re: How to use Loops in Data manipulation in SAS - creating new columns</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-use-Loops-in-Data-manipulation-in-SAS-creating-new/m-p/315492#M21285</link>
      <description>&lt;P&gt;Use the lag() function and first. condition to reset for every first observation in a group&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by MC;
diadiff = dia - lag(dia);
daysdiff = date - lag(date);
km_diff = kms - lag(kms);
if first.MC
then do;
  diadiff = dia;
  daysdiff = 0;
  km_diff = 0;
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If you want your difference values to always be positive, use the abs() function.&lt;/P&gt;</description>
      <pubDate>Wed, 30 Nov 2016 12:11:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-use-Loops-in-Data-manipulation-in-SAS-creating-new/m-p/315492#M21285</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2016-11-30T12:11:31Z</dc:date>
    </item>
    <item>
      <title>Re: How to use Loops in Data manipulation in SAS - creating new columns</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-use-Loops-in-Data-manipulation-in-SAS-creating-new/m-p/315506#M21286</link>
      <description>Thanks Kurt,&lt;BR /&gt;&lt;BR /&gt;Only check in the above is, we need to use:&lt;BR /&gt;diadiff = lag(dia) - dia;&lt;BR /&gt;&lt;BR /&gt;Otherwise the results will be negative numbers, if we use below:&lt;BR /&gt;diadiff = dia - lag(dia);</description>
      <pubDate>Wed, 30 Nov 2016 12:56:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-use-Loops-in-Data-manipulation-in-SAS-creating-new/m-p/315506#M21286</guid>
      <dc:creator>imanojkumar1</dc:creator>
      <dc:date>2016-11-30T12:56:04Z</dc:date>
    </item>
  </channel>
</rss>

