<?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 Identity 2nd Last Record in SAS Studio</title>
    <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559654#M7570</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/274554"&gt;@Kraj1989&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Just a direct access&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data Emp;
input EMP_ID Name $ Salary Sal_Date date9.;
format Sal_Date date9.;
datalines;
101 A 10000 31-May-2016
102 B 15000 30-Jun-2016
103 C 20000 31-Jul-2016
104 D 18000 31-Aug-2016
105 E 13000 30-Sep-2016
106 F 80000 31-Oct-2016
107 G 30000 30-Nov-2016
108 H 35000 31-Dec-2016
;

 
data want;
i=nobs-1;
set emp nobs=nobs point=i;
output;
stop;
run;

&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 17 May 2019 13:04:27 GMT</pubDate>
    <dc:creator>novinosrin</dc:creator>
    <dc:date>2019-05-17T13:04:27Z</dc:date>
    <item>
      <title>How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559646#M7568</link>
      <description>&lt;P&gt;Data SASdat.Emp;&lt;BR /&gt;input EMP_ID Name $ Salary Sal_Date date9.;&lt;BR /&gt;format Sal_Date date9.;&lt;BR /&gt;datalines;&lt;BR /&gt;101 A 10000 31-May-2016&lt;BR /&gt;102 B 15000 30-Jun-2016&lt;BR /&gt;103 C 20000 31-Jul-2016&lt;BR /&gt;104 D 18000 31-Aug-2016&lt;BR /&gt;105 E 13000 30-Sep-2016&lt;BR /&gt;106 F 80000 31-Oct-2016&lt;BR /&gt;107 G 30000 30-Nov-2016&lt;BR /&gt;108 H 35000 31-Dec-2016&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need only Emp_Id with 107&lt;/P&gt;</description>
      <pubDate>Fri, 17 May 2019 12:40:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559646#M7568</guid>
      <dc:creator>Kraj1989</dc:creator>
      <dc:date>2019-05-17T12:40:46Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559654#M7570</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/274554"&gt;@Kraj1989&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Just a direct access&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data Emp;
input EMP_ID Name $ Salary Sal_Date date9.;
format Sal_Date date9.;
datalines;
101 A 10000 31-May-2016
102 B 15000 30-Jun-2016
103 C 20000 31-Jul-2016
104 D 18000 31-Aug-2016
105 E 13000 30-Sep-2016
106 F 80000 31-Oct-2016
107 G 30000 30-Nov-2016
108 H 35000 31-Dec-2016
;

 
data want;
i=nobs-1;
set emp nobs=nobs point=i;
output;
stop;
run;

&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 17 May 2019 13:04:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559654#M7570</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-05-17T13:04:27Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559668#M7572</link>
      <description>&lt;P&gt;Alternatively,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set emp nobs=nobs ;
if _n_=nobs-1;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 17 May 2019 14:27:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559668#M7572</guid>
      <dc:creator>Jagadishkatam</dc:creator>
      <dc:date>2019-05-17T14:27:47Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559670#M7573</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/274554"&gt;@Kraj1989&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;Data SASdat.Emp;&lt;BR /&gt;input EMP_ID Name $ Salary Sal_Date date9.;&lt;BR /&gt;format Sal_Date date9.;&lt;BR /&gt;datalines;&lt;BR /&gt;101 A 10000 31-May-2016&lt;BR /&gt;102 B 15000 30-Jun-2016&lt;BR /&gt;103 C 20000 31-Jul-2016&lt;BR /&gt;104 D 18000 31-Aug-2016&lt;BR /&gt;105 E 13000 30-Sep-2016&lt;BR /&gt;106 F 80000 31-Oct-2016&lt;BR /&gt;107 G 30000 30-Nov-2016&lt;BR /&gt;108 H 35000 31-Dec-2016&lt;BR /&gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I need only Emp_Id with 107&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Here's a silly question: Do you actually need Emp_id = 107 regardless of sort order or the 2nd to last record regardless of actual values stored in that record?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The content of values is a much more common question because data order can change.&lt;/P&gt;
&lt;P&gt;If the Emp_id&amp;nbsp;is what you want then&lt;/P&gt;
&lt;PRE&gt;data want;
   set sasdat.emp;
   where Emp_id=107;
run;&lt;/PRE&gt;</description>
      <pubDate>Fri, 17 May 2019 14:40:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559670#M7573</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2019-05-17T14:40:35Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559729#M7575</link>
      <description>&lt;P&gt;As ballardw notes, the question of whether you want the next to last record is physical order or in sorted order is an important one.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The approach using NOBS= is potentially dangerous.&amp;nbsp; It works only for native SAS data sets (or data step views) that have not been edited.&amp;nbsp; It potentially does not work for data sets in a database, or transport data sets, or data sets that have been edited.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Using the data above&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV id="bigKahuna" class="dijitBorderContainer dijitContainer row-fluid dijitLayoutContainer" data-dojo-props="design:'headline', gutters:false" data-dojo-type="dijit/layout/BorderContainer"&gt;
&lt;DIV id="bodyContainer" class="dijitContentPane dijitBorderContainer-child dijitBorderContainer-dijitContentPane dijitBorderContainerPane dijitAlignCenter dijitContentPaneSingleChild" data-dojo-type="dijit/layout/ContentPane"&gt;
&lt;DIV id="bigContainer" class="dijitBorderContainer dijitContainer row-fluid dijitLayoutContainer" data-dojo-type="dijit/layout/BorderContainer"&gt;
&lt;DIV id="editTabContentPane" class="dijitContentPane dijitAlignCenter dijitContentPaneSingleChild dijitBorderContainer-child dijitBorderContainer-dijitContentPane dijitBorderContainerPane" data-dojo-type="dijit/layout/ContentPane"&gt;
&lt;DIV id="tabsBC" class="tabs dijitBorderContainer dijitContainer dojoDndTarget sasStudioTabsParentContainer dijitLayoutContainer dojoDndContainerOver"&gt;
&lt;DIV id="tabsBC_mainTabs" class="dijitTabContainer dijitTabContainerTop dijitContainer dijitLayoutContainer tabStrip-disabled sasStudioTabsTabContainer sasStudioTabsTabContainerVertical sasStudioTabsTop dijitBorderContainer-child dijitBorderContainer-dijitTabContainerTop dijitBorderContainerPane dijitAlignCenter"&gt;
&lt;DIV class="dijitTabPaneWrapper dijitTabContainerTop-container dijitAlignCenter" data-dojo-attach-point="containerNode"&gt;
&lt;DIV class="dijitTabContainerTopChildWrapper dijitVisible" role="tabpanel" aria-labelledby="tabsBC_mainTabs_tablist_tabsBC_tab0"&gt;
&lt;DIV id="tabsBC_tab0" class="dijitBorderContainer dijitContainer sasStudioTabsTabContainerChild dijitTabPane dijitTabContainerTop-child dijitTabContainerTop-dijitBorderContainer dijitLayoutContainer"&gt;
&lt;DIV id="perspectiveTabContainer_tabsBC_tab0" class="dijitBorderContainer dijitContainer dojoDndTarget dijitBorderContainer-child dijitBorderContainer-dijitBorderContainer dijitBorderContainerPane dijitAlignCenter dijitLayoutContainer dojoDndContainerOver"&gt;
&lt;DIV id="perspectiveTabContainer_tabsBC_tab0sasSuiteTabContainer" class="dijitTabContainer dijitTabContainerTop dijitContainer dijitLayoutContainer tabStrip-disabled sasSuiteTabs dijitAlignCenter dijitBorderContainer-child dijitBorderContainer-dijitTabContainerTop dijitBorderContainerPane"&gt;
&lt;DIV class="dijitTabPaneWrapper dijitTabContainerTop-container dijitAlignCenter" data-dojo-attach-point="containerNode"&gt;
&lt;DIV class="dijitTabContainerTopChildWrapper dijitVisible" role="tabpanel" aria-labelledby="perspectiveTabContainer_tabsBC_tab0sasSuiteTabContainer_tablist_perspectiveTabContainer_tabsBC_tab0log"&gt;
&lt;DIV id="perspectiveTabContainer_tabsBC_tab0log" class="dijitBorderContainer dijitContainer dijitTabPane dijitTabContainerTop-child dijitTabContainerTop-dijitBorderContainer dijitLayoutContainer"&gt;
&lt;DIV id="dijit_layout_BorderContainer_2" class="dijitBorderContainer dijitContainer dijitBorderContainer-child dijitBorderContainer-dijitBorderContainer dijitBorderContainerPane dijitAlignCenter dijitLayoutContainer"&gt;
&lt;DIV id="dijit_layout_ContentPane_3" class="dijitContentPane dijitBorderContainer-child dijitBorderContainer-dijitContentPane dijitBorderContainerPane dijitAlignCenter" dir="ltr"&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;83 data _null_;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;84 i = nobs-1;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;85 set emp nobs=nobs point=i;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;86 put (_all_)(=);&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;87 stop;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;88 run;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;EMP_ID=107 Name=G Salary=30000 Sal_Date=30NOV2020&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;but&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;
&lt;DIV id="bigKahuna" class="dijitBorderContainer dijitContainer row-fluid dijitLayoutContainer" data-dojo-props="design:'headline', gutters:false" data-dojo-type="dijit/layout/BorderContainer"&gt;
&lt;DIV id="bodyContainer" class="dijitContentPane dijitBorderContainer-child dijitBorderContainer-dijitContentPane dijitBorderContainerPane dijitAlignCenter dijitContentPaneSingleChild" data-dojo-type="dijit/layout/ContentPane"&gt;
&lt;DIV id="bigContainer" class="dijitBorderContainer dijitContainer row-fluid dijitLayoutContainer" data-dojo-type="dijit/layout/BorderContainer"&gt;
&lt;DIV id="editTabContentPane" class="dijitContentPane dijitAlignCenter dijitContentPaneSingleChild dijitBorderContainer-child dijitBorderContainer-dijitContentPane dijitBorderContainerPane" data-dojo-type="dijit/layout/ContentPane"&gt;
&lt;DIV id="tabsBC" class="tabs dijitBorderContainer dijitContainer dojoDndTarget sasStudioTabsParentContainer dijitLayoutContainer dojoDndContainerOver"&gt;
&lt;DIV id="tabsBC_mainTabs" class="dijitTabContainer dijitTabContainerTop dijitContainer dijitLayoutContainer tabStrip-disabled sasStudioTabsTabContainer sasStudioTabsTabContainerVertical sasStudioTabsTop dijitBorderContainer-child dijitBorderContainer-dijitTabContainerTop dijitBorderContainerPane dijitAlignCenter"&gt;
&lt;DIV class="dijitTabPaneWrapper dijitTabContainerTop-container dijitAlignCenter" data-dojo-attach-point="containerNode"&gt;
&lt;DIV class="dijitTabContainerTopChildWrapper dijitVisible" role="tabpanel" aria-labelledby="tabsBC_mainTabs_tablist_tabsBC_tab0"&gt;
&lt;DIV id="tabsBC_tab0" class="dijitBorderContainer dijitContainer sasStudioTabsTabContainerChild dijitTabPane dijitTabContainerTop-child dijitTabContainerTop-dijitBorderContainer dijitLayoutContainer"&gt;
&lt;DIV id="perspectiveTabContainer_tabsBC_tab0" class="dijitBorderContainer dijitContainer dojoDndTarget dijitBorderContainer-child dijitBorderContainer-dijitBorderContainer dijitBorderContainerPane dijitAlignCenter dijitLayoutContainer dojoDndContainerOver"&gt;
&lt;DIV id="perspectiveTabContainer_tabsBC_tab0sasSuiteTabContainer" class="dijitTabContainer dijitTabContainerTop dijitContainer dijitLayoutContainer tabStrip-disabled sasSuiteTabs dijitAlignCenter dijitBorderContainer-child dijitBorderContainer-dijitTabContainerTop dijitBorderContainerPane"&gt;
&lt;DIV class="dijitTabPaneWrapper dijitTabContainerTop-container dijitAlignCenter" data-dojo-attach-point="containerNode"&gt;
&lt;DIV class="dijitTabContainerTopChildWrapper dijitVisible" role="tabpanel" aria-labelledby="perspectiveTabContainer_tabsBC_tab0sasSuiteTabContainer_tablist_perspectiveTabContainer_tabsBC_tab0log"&gt;
&lt;DIV id="perspectiveTabContainer_tabsBC_tab0log" class="dijitBorderContainer dijitContainer dijitTabPane dijitTabContainerTop-child dijitTabContainerTop-dijitBorderContainer dijitLayoutContainer"&gt;
&lt;DIV id="dijit_layout_BorderContainer_2" class="dijitBorderContainer dijitContainer dijitBorderContainer-child dijitBorderContainer-dijitBorderContainer dijitBorderContainerPane dijitAlignCenter dijitLayoutContainer"&gt;
&lt;DIV id="dijit_layout_ContentPane_3" class="dijitContentPane dijitBorderContainer-child dijitBorderContainer-dijitContentPane dijitBorderContainerPane dijitAlignCenter" dir="ltr"&gt;
&lt;DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;90 proc sql;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;91 delete from emp&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;92 where emp_id = 107;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV id="sasLogNote4_1558113678980" class="sasNote"&gt;&lt;FONT face="courier new,courier"&gt;NOTE: 1 row was deleted from WORK.EMP.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;93 quit;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV id="sasLogNote5_1558113678980" class="sasNote"&gt;&lt;FONT face="courier new,courier"&gt;NOTE: PROCEDURE SQL used (Total process time):&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;&lt;FONT face="courier new,courier"&gt;real time 0.00 seconds&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;&lt;FONT face="courier new,courier"&gt;cpu time 0.00 seconds&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;94&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;95 data _null_;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;96 i = nobs-1;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;97 set emp nobs=nobs point=i;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;98 put (_all_)(=);&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;99 stop;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;100 run;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasNote"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;EMP_ID=. Name= Salary=. Sal_Date=.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;FONT face="courier new,courier"&gt;i=7 nobs=8 EMP_ID=. Name= Salary=. Sal_Date=. _ERROR_=1 _N_=1&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;This problem is a variation on calculating lags and leads.&amp;nbsp; See this 2019 SAS Global Forum paper for some ideas:&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV class="sasSource"&gt;&lt;A href="https://www.sas.com/content/dam/SAS/support/en/sas-global-forum-proceedings/2019/3699-2019.pdf" target="_blank"&gt;https://www.sas.com/content/dam/SAS/support/en/sas-global-forum-proceedings/2019/3699-2019.pdf&lt;/A&gt;&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;</description>
      <pubDate>Fri, 17 May 2019 17:35:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559729#M7575</guid>
      <dc:creator>JackHamilton</dc:creator>
      <dc:date>2019-05-17T17:35:37Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559751#M7576</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data Emp;
input EMP_ID Name $ Salary Sal_Date : date9.;
format Sal_Date date9.;
datalines;
101 A 10000 31-May-2016
102 B 15000 30-Jun-2016
103 C 20000 31-Jul-2016
104 D 18000 31-Aug-2016
105 E 13000 30-Sep-2016
106 F 80000 31-Oct-2016
107 G 30000 30-Nov-2016
108 H 35000 31-Dec-2016
;

proc sql;
create table want as
select *
from emp
having monotonic()=count(*)-1;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 17 May 2019 18:33:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559751#M7576</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-05-17T18:33:32Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559755#M7577</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/274554"&gt;@Kraj1989&lt;/a&gt;&amp;nbsp; &amp;nbsp;Something I noticed just now which I should have earlier is that your date values are sorted and denote the last day of the month. If my observation is correct, a simple approach like the following is convenient&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data Emp;
input EMP_ID Name $ Salary Sal_Date : date9.;
format Sal_Date date9.;
datalines;
101 A 10000 31-May-2016
102 B 15000 30-Jun-2016
103 C 20000 31-Jul-2016
104 D 18000 31-Aug-2016
105 E 13000 30-Sep-2016
106 F 80000 31-Oct-2016
107 G 30000 30-Nov-2016
108 H 35000 31-Dec-2016
;

proc sql;
create table want as
select *
from emp
having Sal_Date=intnx('month',max(Sal_Date),-1,'e');
quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 17 May 2019 18:44:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559755#M7577</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-05-17T18:44:40Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559774#M7578</link>
      <description>The monotonic function can be useful, but it is not documented, and is not guaranteed to return sequential numbers with no gaps starting from 1.  That's not promised by the definition of monotonic: "varying in such a way that it either never decreases or never increases".&lt;BR /&gt;In his paper on adding sequence numbers, &lt;A href="http://support.sas.com/resources/papers/proceedings14/1277-2014.pdf" target="_blank"&gt;http://support.sas.com/resources/papers/proceedings14/1277-2014.pdf&lt;/A&gt; , Howard Schreier says:&lt;BR /&gt;"The catch is that the MONOTONIC function is not documented. Organizations may have policies prohibiting the use of undocumented features. Even in the absence of such a policy, a coder may be reluctant to rely on the function. In developing examples to illustrate the usage of the MONOTONIC function, the author encountered some surprising and disconcerting results. In some cases, series returned by MONOTONIC began not with 1 (one), but rather with higher integers. Unfortunately, it seemed not possible to produce such results consistently, or to experimentally determine just what circumstances cause the surprising and suspicious offsets."&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Fri, 17 May 2019 19:43:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559774#M7578</guid>
      <dc:creator>JackHamilton</dc:creator>
      <dc:date>2019-05-17T19:43:45Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559837#M7579</link>
      <description>&lt;P&gt;Interesting feedback.&lt;/P&gt;
&lt;P&gt;So no NOBS= or MONOTONIC()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
Data Emp;
input EMP_ID Name $ Salary Sal_Date : date9.;
format Sal_Date date9.;
datalines;
101 A 10000 31-May-2016
102 B 15000 30-Jun-2016
103 C 20000 31-Jul-2016
104 D 18000 31-Aug-2016
105 E 13000 30-Sep-2016
106 F 80000 31-Oct-2016
107 G 30000 30-Nov-2016
108 H 35000 31-Dec-2016
;

data want;
set emp end=lr;
n+1;
if lr;
n=n-1;
set emp point=n;
output;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 18 May 2019 02:18:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559837#M7579</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-05-18T02:18:29Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559838#M7580</link>
      <description>NOBS= is OK if you just created the data set yourself in the same program, so you know it hasn't been edited.&lt;BR /&gt;If you've set POINTOBS=NO, you can use NOBS= but not POINT=.  REUSE=YES causes POINTOBS to be set to know.  You might want to use POINTOBS=NO because, according to the documentation, writing a compressed data set with POINTOBS=YES increases CPU usage by 10% when creating a compressed data set.&lt;BR /&gt;There's a function, ATTRN, which gives more information about the number of observations in a data set, and potentially overcomes the problem of deleted observations.  &lt;A href="https://documentation.sas.com/?docsetId=lefunctionsref&amp;amp;docsetTarget=p12uchp7hm5h2zn1om2ut816af7h.htm&amp;amp;docsetVersion=9.4&amp;amp;locale=en" target="_blank"&gt;https://documentation.sas.com/?docsetId=lefunctionsref&amp;amp;docsetTarget=p12uchp7hm5h2zn1om2ut816af7h.htm&amp;amp;docsetVersion=9.4&amp;amp;locale=en&lt;/A&gt;&lt;BR /&gt;</description>
      <pubDate>Sat, 18 May 2019 03:08:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559838#M7580</guid>
      <dc:creator>JackHamilton</dc:creator>
      <dc:date>2019-05-18T03:08:45Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559840#M7581</link>
      <description>&lt;P&gt;Yes aware of attrn, but how about&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want ;
if _n_=1 then do;
   dcl hash H () ;
   h.definekey  ("_n_") ;
   h.definedata ("EMP_ID"," Name"," Salary"," Sal_Date ") ;
   h.definedone () ;
end;
set emp end=lr;
h.add();
if lr ;
_n_=_n_-1;
_iorc_=h.find()	;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 18 May 2019 03:27:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559840#M7581</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-05-18T03:27:36Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559844#M7582</link>
      <description>&lt;P&gt;Only need the END= and FIRSTOBS= options to work. That should work for any dataset, including sequential access datasets (like XPORT files, views or what SAS used to call TAPE datasets).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want ;
  set emp;
  set emp (firstobs=2 drop=_all_) end=eof;
  if eof ;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;So on the next to last observation the EOF will be true. On the last observation the&amp;nbsp; second SET will read past the end and the data step will stop before the IF statement is reached.&lt;/P&gt;
&lt;P&gt;If there are less than 2 observations then none will be written.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Same method can be used to find the 3rd to last, 4th to last etc by just changing the value of the FIRSTOBS= option.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 18 May 2019 04:19:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/559844#M7582</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2019-05-18T04:19:07Z</dc:date>
    </item>
    <item>
      <title>Re: How to Identity 2nd Last Record</title>
      <link>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/560249#M7595</link>
      <description>I hadn't though of using DROP=_ALL_.  That's a very clean and extensible solution.&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Mon, 20 May 2019 18:52:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Studio/How-to-Identity-2nd-Last-Record/m-p/560249#M7595</guid>
      <dc:creator>JackHamilton</dc:creator>
      <dc:date>2019-05-20T18:52:19Z</dc:date>
    </item>
  </channel>
</rss>

