<?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>bentleyj1 Tracker</title>
    <link>https://communities.sas.com/kntur85557/tracker</link>
    <description>bentleyj1 Tracker</description>
    <pubDate>Wed, 06 May 2026 00:52:23 GMT</pubDate>
    <dc:date>2026-05-06T00:52:23Z</dc:date>
    <item>
      <title>Re: How to identify if working in EG or SAS/Win?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-if-working-in-EG-or-SAS-Win/m-p/526622#M143460</link>
      <description>Thanks for your idea. One of the things I like about SAS is that there is usually more than one way to do something. Of course, sometimes that's a bad thing too. &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;</description>
      <pubDate>Sat, 12 Jan 2019 18:21:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-if-working-in-EG-or-SAS-Win/m-p/526622#M143460</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2019-01-12T18:21:19Z</dc:date>
    </item>
    <item>
      <title>How to identify if working in EG or SAS/Win?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-identify-if-working-in-EG-or-SAS-Win/m-p/526521#M143407</link>
      <description>&lt;P&gt;I have a need to write a program that runs manually on EG&amp;nbsp;connected to a server&amp;nbsp;and on SAS/Win submitting to a server&amp;nbsp;and on Linux with the job submitted as batch with Cron.&amp;nbsp; In the past I've used &amp;amp;sysscp to identify if we're running on SAS/Win or a server but how to identify EG?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;EG creates automatic macro variables not created by the other environments (like _clientVersion)&amp;nbsp;and I could use %SYMEXIST to see if one of them is in the global macro table, but&amp;nbsp;is there an automatic variable like &amp;amp;sysscp that says 'EG'?&amp;nbsp;&amp;nbsp; I couldn't find one.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="https://blogs.sas.com/content/sasdummy/2012/10/09/special-macro-vars-in-eg/" target="_blank"&gt;https://blogs.sas.com/content/sasdummy/2012/10/09/special-macro-vars-in-eg/&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Fri, 11 Jan 2019 22:46:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-identify-if-working-in-EG-or-SAS-Win/m-p/526521#M143407</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2019-01-11T22:46:19Z</dc:date>
    </item>
    <item>
      <title>Re: Lag performance over 400 million sorted records</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Lag-performance-over-400-million-sorted-records/m-p/507598#M136273</link>
      <description>&lt;P&gt;Thanks to Everyone who replied.&amp;nbsp; As usual, I'm immensely grateful for the intelligent responses I received.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My largest concern was that for each record we were creating 15 lagged variables whether or not they were needed for the calculations--the number of needed lagged variables is based on the loan_count--if loan_count=2 then we need 2 lagged variables and only if it is more than 6 do we need all 15.&amp;nbsp; As a short-term fix until I can further investigate the temporary array approach I'm using this code that lags only the fields needed for the calculation.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;if loan_count = 2 then do;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp; ** here create only the lagged variables we need. ;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;dpd_lag1 =&amp;nbsp; lag(dpd);&amp;nbsp; pay_lag1 =&amp;nbsp; lag(payment_amount);&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max_dpd = max(dpd,dpd_lag1);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; max_dpd_2 = dpd_lag1;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if dq_monthly_payment &amp;gt; 0 then do;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHRVA421 = (100 * payment) / dq_monthly_payment;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHRVA421P = (100 * sum(payment_amount,pay_lag1)) / (dq_monthly_payment * 2);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;else if loan_count = 4 then do;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;dp_lag1 =&amp;nbsp; lag(dpd); &amp;nbsp; &amp;nbsp; pay_lag1 =&amp;nbsp; lag(payment_amount);&amp;nbsp; prin_lag1 =&amp;nbsp; lag(payment);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;dpd_lag2 = lag2(dpd);&amp;nbsp; pay_lag2 = lag2(payment_amount);&amp;nbsp; prin_lag2 = lag2(payment);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;dpd_lag3 = lag3(dpd);&amp;nbsp; pay_lag3 = lag3(payment_amount); &amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max_dpd = max(dpd,dpd_lag1,dpd_lag2,dpd_lag3);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; max_dpd_2 = max(dpd_lag1,dpd_lag2,dpd_lag3);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if dq_monthly_payment &amp;gt; 0 then do;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;CHRVA421 = (100 * sum(payment,prin_lag1,prin_lag2)) / (dq_monthly_payment * 3);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;CHRVA421P = (100 * sum(payment_amount,pay_lag1,pay_lag2,pay_lag3))/(dq_monthly_payment * 4);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;end;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;else if loan_count &amp;gt; 6 then do;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;dpd_lag1 =&amp;nbsp; lag(dpd); &amp;nbsp; pay_lag1 =&amp;nbsp; lag(payment_amount);&amp;nbsp; prin_lag1 =&amp;nbsp; lag(payment);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;dpd_lag2 = lag2(dpd);&amp;nbsp; pay_lag2 = lag2(payment_amount);&amp;nbsp; prin_lag2 = lag2(payment);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;dpd_lag3 = lag3(dpd);&amp;nbsp; pay_lag3 = lag3(payment_amount);&amp;nbsp; prin_lag3 = lag3(payment);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;dpd_lag4 = lag4(dpd);&amp;nbsp; pay_lag4 = lag4(payment_amount);&amp;nbsp; prin_lag4 = lag4(payment);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;dpd_lag5 = lag5(dpd);&amp;nbsp; pay_lag5 = lag5(payment_amount);&amp;nbsp; prin_lag5 = lag5(payment);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp; max_dpd = max(dpd,dpd_lag1,dpd_lag2,dpd_lag3,dpd_lag4,dpd_lag5);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp; max_dpd_2 = max(dpd_lag1,dpd_lag2,dpd_lag3,dpd_lag4,dpd_lag5);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp; if dq_monthly_payment &amp;gt; 0 then do;&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHRVA421 = (100 * sum(payment,prin_lag1,prin_lag2,prin_lag3,prin_lag4,prin_lag5))/(dq_monthly_payment*6);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CHRVA421P = (100 * sum(payment_amount,pay_lag1,pay_lag2,pay_lag3,pay_lag4,pay_lag5))/(dq_monthly_payment*6);&lt;/FONT&gt;&lt;BR /&gt;&lt;FONT size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;&amp;nbsp;end;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 25 Oct 2018 21:31:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Lag-performance-over-400-million-sorted-records/m-p/507598#M136273</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-10-25T21:31:26Z</dc:date>
    </item>
    <item>
      <title>Re: Lag performance over 400 million sorted records</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Lag-performance-over-400-million-sorted-records/m-p/507029#M136003</link>
      <description>&lt;P&gt;Brilliant.&amp;nbsp; Thanks.&amp;nbsp; I might go with the temporary array solution... it's got to be faster than adding 15 variables to each record and then dropping them at the end of the step.&lt;/P&gt;</description>
      <pubDate>Tue, 23 Oct 2018 22:05:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Lag-performance-over-400-million-sorted-records/m-p/507029#M136003</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-10-23T22:05:26Z</dc:date>
    </item>
    <item>
      <title>Re: Lag performance over 400 million sorted records</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Lag-performance-over-400-million-sorted-records/m-p/507026#M136000</link>
      <description>&lt;P&gt;I've thought of using an array but figured i'd ask for opinions on this solution first.&amp;nbsp; The issue with a _temporary_ array is that the values are retained-- "Temporary data element values are always automatically retained, rather than being reset to missing at the beginning of the next iteration of the DATA step."&amp;nbsp; &lt;A href="http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000201956.htm" target="_blank"&gt;http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a000201956.htm&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need the array to be refreshed/reloaded with each iteration of the DATA step because an account can have more than 5 records.&amp;nbsp; So&amp;nbsp;would anything be gained from an array versus assignment statements?&lt;/P&gt;</description>
      <pubDate>Tue, 23 Oct 2018 21:51:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Lag-performance-over-400-million-sorted-records/m-p/507026#M136000</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-10-23T21:51:54Z</dc:date>
    </item>
    <item>
      <title>Lag performance over 400 million sorted records</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Lag-performance-over-400-million-sorted-records/m-p/507021#M135996</link>
      <description>&lt;P&gt;I'm reworking a program that has a data set with about 400 million records sorted by account number with one account number per time period.&amp;nbsp; There are about 300 time periods but each account can be in the data set only maybe&amp;nbsp;20 times.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;We have to process by account_number because we need to derive running totals for each account number across all time periods.&amp;nbsp;&amp;nbsp;&lt;BR /&gt;Some derived variables requires lagging.&amp;nbsp; Here's the existing code-.&amp;nbsp; For each record a series of lagged variables are created and then referenced in the code later.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;dpd_lag1=lag(dpd);&amp;nbsp; pay_lag1=lag(payment_amount);&amp;nbsp; prin_lag1=lag(payment);&lt;BR /&gt;&amp;nbsp;dpd_lag2=lag2(dpd);&amp;nbsp; pay_lag2=lag2(payment_amount);&amp;nbsp; prin_lag2=lag2(payment);&lt;BR /&gt;&amp;nbsp;dpd_lag3=lag3(dpd);&amp;nbsp; pay_lag3=lag3(payment_amount);&amp;nbsp; prin_lag3=lag3(payment);&lt;BR /&gt;&amp;nbsp;dpd_lag4=lag4(dpd);&amp;nbsp; pay_lag4=lag4(payment_amount);&amp;nbsp; prin_lag4=lag4(payment);&lt;BR /&gt;&amp;nbsp;dpd_lag5=lag5(dpd);&amp;nbsp; pay_lag5=lag5(payment_amount);&amp;nbsp; prin_lag5=lag5(payment);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;if loan_count=2 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max_dpd=max(dpd,dpd_lag1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max_dpd_2=dpd_lag1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if dq_monthly_payment &amp;gt; 0 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421=(100*payment)/dq_monthly_payment;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421p=(100*sum(payment_amount,pay_lag1))/(dq_monthly_payment*2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421=.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421p=.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if loan_count=3 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max_dpd=max(dpd,dpd_lag1,dpd_lag2);&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; max_dpd_2=max(dpd_lag1,dpd_lag2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if dq_monthly_payment &amp;gt; 0 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421=(100*sum(payment,prin_lag1))/(dq_monthly_payment*2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421p=(100*sum(payment_amount,pay_lag1,pay_lag2))/(dq_monthly_payment*3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421=.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421p=.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; ** continues up to loan_count=6 ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The program takes Hours to run on our server.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My question is, do you think it would be faster to lag the variables 'on the fly' instead of creating them as we're doing here?&amp;nbsp; We'd remove the lag assignment statements and the code would look like this with LAG functions used on-the-fly. (may be parenthesis issues in here.)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;if loan_count=2 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; max_dpd=max(dpd,lag(dpd));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;max_dpd_2=lag(dpd);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if dq_monthly_payment &amp;gt; 0 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;chrva421=(100*payment)/dq_monthly_payment;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421p=(100*sum(payment_amount,lag(payment_amount))/(dq_monthly_payment*2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421=.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421p=.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else if loan_count=3 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; max_dpd=max(dpd,lag(dpd),lag2(dpd));&lt;BR /&gt;&amp;nbsp; &amp;nbsp;max_dpd_2=max(dpd_lag1,dpd_lag2);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if dq_monthly_payment &amp;gt; 0 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;chrva421=(100*sum(payment,lag(payment))/(dq_monthly_payment*2);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;chrva421p=(100*sum(payment_amount,lag(payment),lag2(payment))/(dq_monthly_payment*3);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421=.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; chrva421p=.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;I'm also thinking of putting this into a macro do-loop.&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;Thanks in advance for your thoughts.&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Tue, 23 Oct 2018 21:37:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Lag-performance-over-400-million-sorted-records/m-p/507021#M135996</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-10-23T21:37:20Z</dc:date>
    </item>
    <item>
      <title>Proc Means.  Median is not in output data set.</title>
      <link>https://communities.sas.com/t5/Statistical-Procedures/Proc-Means-Median-is-not-in-output-data-set/m-p/497523#M25721</link>
      <description>&lt;P&gt;I need the median in a Proc Means output data set.&amp;nbsp; It doesn't get output.&amp;nbsp; But when I run the same step without output out= the median is in the listing.&amp;nbsp; Any ideas?&amp;nbsp; I haven't tried Proc Summary yet.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here's the log and output I've produced.&amp;nbsp; Comments explain what's going on.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;**&amp;nbsp;Generate 6 descriptive statistics&amp;nbsp;including median/p50 and write values to an output data set. ;&lt;/P&gt;&lt;P&gt;380 proc means data=shared.&amp;amp;program(obs=500000)&lt;/P&gt;&lt;P&gt;381 n nmiss mean p50 std min max maxdec=0;&lt;/P&gt;&lt;P&gt;382 var amtFinanced;&lt;/P&gt;&lt;P&gt;383 output out=stats;&lt;/P&gt;&lt;P&gt;384 run;&lt;/P&gt;&lt;P&gt;NOTE: There were 500000 observations read from the data set SHARED.PRODV02_INDIRECT_TTD.&lt;/P&gt;&lt;P&gt;NOTE: The data set WORK.STATS has 5 observations and 4 variables.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;** The note above says the output data set has 5 observations, not 6.&amp;nbsp; The median is missing. ;&lt;/P&gt;&lt;P&gt;** In the source dataset the variable is formatted as dollar12. ;&lt;/P&gt;&lt;P&gt;** Here's the data set.&lt;/P&gt;&lt;P&gt;Obs _TYPE_ _FREQ_ _STAT_ AMTFINANCED&lt;/P&gt;&lt;P&gt;1 0 500000 N $500,000&lt;/P&gt;&lt;P&gt;2 0 500000 MIN $0&lt;/P&gt;&lt;P&gt;3 0 500000 MAX $34400368&lt;/P&gt;&lt;P&gt;4 0 500000 MEAN $18,756&lt;/P&gt;&lt;P&gt;5 0 500000 STD $54,091&lt;/P&gt;&lt;P&gt;　&lt;/P&gt;&lt;P&gt;** Now just print the 6 statistics, with no output data set. All is normal. ;&lt;/P&gt;&lt;P&gt;387 proc means data=shared.&amp;amp;program(obs=500000)&lt;/P&gt;&lt;P&gt;388 n nmiss mean p50 std min max maxdec=0;&lt;/P&gt;&lt;P&gt;389 var amtFinanced;&lt;/P&gt;&lt;P&gt;390 /* output out=stats;*/&lt;/P&gt;&lt;P&gt;391 run;&amp;nbsp;&lt;/P&gt;&lt;P&gt;NOTE: There were 500000 observations read from the data set SHARED.PRODV02_INDIRECT_TTD.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;** Here's the listing ;&lt;/P&gt;&lt;P&gt;The MEANS Procedure&lt;/P&gt;&lt;P&gt;Analysis Variable : AMTFINANCED $Financed&lt;/P&gt;&lt;P&gt;N N Miss Mean 50th Pctl Std Dev Minimum Maximum&lt;/P&gt;&lt;P&gt;------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;500000 0 18756 17359 54091 0 34400368&lt;/P&gt;&lt;P&gt;------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 20 Sep 2018 19:09:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Statistical-Procedures/Proc-Means-Median-is-not-in-output-data-set/m-p/497523#M25721</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-09-20T19:09:29Z</dc:date>
    </item>
    <item>
      <title>Re: %unquoting a macro variable containing a directory path</title>
      <link>https://communities.sas.com/t5/SAS-Programming/unquoting-a-macro-variable-containing-a-directory-path/m-p/495463#M130761</link>
      <description>&lt;P&gt;Thanks Vince!&amp;nbsp; Yeah, this could work for me.&amp;nbsp; I'll give it a spin.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I just want to get rid of the message.&amp;nbsp; Unexpected notes and messages make some people nervous, and I don't like them in my logs even when they're harmless.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Thu, 13 Sep 2018 19:09:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/unquoting-a-macro-variable-containing-a-directory-path/m-p/495463#M130761</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-09-13T19:09:10Z</dc:date>
    </item>
    <item>
      <title>%unquoting a macro variable containing a directory path</title>
      <link>https://communities.sas.com/t5/SAS-Programming/unquoting-a-macro-variable-containing-a-directory-path/m-p/495411#M130741</link>
      <description>&lt;P&gt;There are quite a few questions about unquoting but none provide a solution for my problem.&amp;nbsp; I have a macro variable containing a directory string that is created in the SAS desktop environment and passed to a server via %syslput.&amp;nbsp; %syslput requires that the macro variable be %bquoted or else it will return an 'unrecognized options' error because of the / delimiters.&amp;nbsp; That's ok.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When I use the macro variable in the server environment in an X-Command&amp;nbsp;it works just fine but&amp;nbsp;SYMBOLGEN returns the "Some characters in the above value which were subject to macro quoting have been unquoted for printing." message.&amp;nbsp; Using the %unquote function doesn't make the message go away.&amp;nbsp; I'm wondering how to make it go away, other than use NOSYMBOLGEN.&amp;nbsp; This does not run inside a macro.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%let dirFieldList=/risk/data/201808/filelist.txt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#800080" face="SAS Monospace" size="2"&gt;%syslput&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt; dirFieldList=&lt;/FONT&gt;&lt;FONT color="#800080" face="SAS Monospace" size="2"&gt;%bquote&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;(&amp;amp;dirFieldList);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#9b1e31" face="SAS Monospace" size="2"&gt;RSUBMIT&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#9b1e31" face="SAS Monospace" size="2"&gt;options&lt;/FONT&gt; &lt;FONT color="#9b1e31" face="SAS Monospace" size="2"&gt;symbolgen&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#9b1e31" face="SAS Monospace" size="2"&gt;x&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt; rm &lt;/FONT&gt;&lt;FONT color="#800080" face="SAS Monospace" size="2"&gt;%unquote&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;(&amp;amp;dirFileList);&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;&amp;nbsp;** Returns same message when &amp;amp;dirFileList is not inside " " ;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;496 options symbolgen;&amp;nbsp;&lt;/P&gt;&lt;P&gt;497&lt;/P&gt;&lt;P&gt;498 x rm %unquote("&amp;amp;dirFileList");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SYMBOLGEN: Macro variable DIRFILELIST resolves to /sasapp/credrisk/wfdscrdm/filelist.txt&lt;/P&gt;&lt;P&gt;SYMBOLGEN: Some characters in the above value which were subject to macro quoting have been unquoted for printing.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 13 Sep 2018 17:17:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/unquoting-a-macro-variable-containing-a-directory-path/m-p/495411#M130741</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-09-13T17:17:50Z</dc:date>
    </item>
    <item>
      <title>Re: Enterprise Guide, how to run program at startup</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Enterprise-Guide-how-to-run-program-at-startup/m-p/490473#M31628</link>
      <description>&lt;P&gt;I can't find&amp;nbsp;&lt;SPAN&gt;the workspace server initialization log (right-click the server in the Servers view, select Properties, Software tab, then click View Initialization Log button).&lt;/SPAN&gt;&amp;nbsp; It's possible likely that our SAS Admin has turned off initialization logging, or is it possible that the SAS Admin has disabled the run code at startup capability?&amp;nbsp; Something like that wouldn't surprise me.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What I need are some macro variables and librefs assigned at startup so I don't have to assign them manually. &amp;nbsp; But I don't know that will work because my experience seems to be that macro variables and librefs assigned in one project are not available in another.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 28 Aug 2018 14:23:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Enterprise-Guide-how-to-run-program-at-startup/m-p/490473#M31628</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-28T14:23:05Z</dc:date>
    </item>
    <item>
      <title>Re: Enterprise Guide, how to run program at startup</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Enterprise-Guide-how-to-run-program-at-startup/m-p/489280#M31594</link>
      <description>&lt;P&gt;Thanks for your help Casey.&amp;nbsp; I'll give it another try.&amp;nbsp; I didn't know about the &lt;SPAN&gt;workspace server initialization log (right-click the server in the Servers view, select Properties, Software tab, then click View Initialization Log button).&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What does&amp;nbsp; %let&lt;SPAN&gt;_EG_WORKSPACEINIT=1 do in your custom code?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Modifying the autoexec.sas on the server and updating the server definitions to use different autoexecs is a great idea but it will never happen here.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Thu, 23 Aug 2018 14:27:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Enterprise-Guide-how-to-run-program-at-startup/m-p/489280#M31594</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-23T14:27:34Z</dc:date>
    </item>
    <item>
      <title>Re: How to link a sequence of SAS Enterprise Guide projects</title>
      <link>https://communities.sas.com/t5/SAS-Communities-Library/How-to-link-a-sequence-of-SAS-Enterprise-Guide-projects/tac-p/489024#M3098</link>
      <description>&lt;P&gt;This should jump-start some work I'll have to do in a few weeks.&amp;nbsp; Thanks for sharing it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Wed, 22 Aug 2018 19:51:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Communities-Library/How-to-link-a-sequence-of-SAS-Enterprise-Guide-projects/tac-p/489024#M3098</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-22T19:51:29Z</dc:date>
    </item>
    <item>
      <title>Enterprise Guide, how to run program at startup</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Enterprise-Guide-how-to-run-program-at-startup/m-p/489023#M31581</link>
      <description>&lt;P&gt;I'm a new EG user and every day&amp;nbsp;I'm finding things that irritate me.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Upon starting EG I've got it set up to automatically connect to a remote server.&amp;nbsp; That works fine.&amp;nbsp; But I also have a second remote server that I sometimes connect to and sometimes I submit code to the local&amp;nbsp; 'server'.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;How do I (or can I) make it submit server-specific code (an autoexec.sas) the first time I connect to a server?&amp;nbsp; That is, when I set server&amp;nbsp;serverA as&amp;nbsp;'active' I want it to automatically run the serverA program&amp;nbsp;and when I set serverB active&amp;nbsp;I want the serverB program to run.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;These programs contain server-specific options (like sasautos= ) and libname and filename&amp;nbsp;statements.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;With my old PC SAS and SAS/Connect&amp;nbsp;it was pretty self-explanatory.&amp;nbsp; But with EG, the same Tools, Options, SAS Programs, 'submit SAS code when server is connected code' runs for every server.&amp;nbsp; I've tried putting an autoexec.sas in my home directory on each server but EG appears to ignore it.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In the program that's submitted to the servers when they're made active, I tried using a macro with conditional execution based on the value of _SASSERVERNAME to assign a global macro variable holding the server name.&amp;nbsp; But then checking it with a different&amp;nbsp;program using %put _user_; &amp;nbsp;doesn't show the global macro variable I tried to create&amp;nbsp;so I assume its not working.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ha anyone figured out how to do this?&amp;nbsp; Or is the answer to have a 'project' for each server and manually run it after connecting?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance for the help.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Wed, 22 Aug 2018 19:47:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Enterprise-Guide-how-to-run-program-at-startup/m-p/489023#M31581</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-22T19:47:35Z</dc:date>
    </item>
    <item>
      <title>Re: How to reset EG 7.12 log summary to blank?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-reset-EG-7-12-log-summary-to-blank/m-p/488545#M287399</link>
      <description>&lt;P&gt;Thanks for the reply Chris.&amp;nbsp; As luck would have it, I ordered your book just a few days ago... it might arrive today.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Unfortunately for me, EG is becoming the required tool for SAS programmers here.&amp;nbsp; It's fine for data analysts who want to mouse their way thru a data step but it's too clumsy for doing any real coding.&amp;nbsp; Our IT&amp;nbsp;is very lazy and it they can dump the&amp;nbsp;SAS/Windows software then it's less work for them. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 21 Aug 2018 13:27:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-reset-EG-7-12-log-summary-to-blank/m-p/488545#M287399</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-21T13:27:41Z</dc:date>
    </item>
    <item>
      <title>How to reset EG 7.12 log summary to blank?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-reset-EG-7-12-log-summary-to-blank/m-p/488335#M287397</link>
      <description>&lt;P&gt;I'm an old SAS programmer transitioning to Enterprise Guide.&amp;nbsp; Most things I like, some things I don't.&amp;nbsp; I understand the concept of&amp;nbsp;a SAS project, but I write programs, not projects.&amp;nbsp; Anyway. . .&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;During development run a program one step at a time and capture the log step by step so I can refer back to a previous iteration.&amp;nbsp; When it all works I do a final run to get a clean log for documentation.&amp;nbsp; I figured out how to turn on the EG Project Log feature.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My question is about the Log Summary window.&amp;nbsp;&amp;nbsp;Right now it has 500 entries (all Notes).&amp;nbsp; It bugs me.&amp;nbsp; It's very useful, but is there a way to clear the log summary without losing the Project Log?&amp;nbsp; Or do I have to save/delete the Project Log to make the Log Summary go away?&amp;nbsp; I asked a couple people and nobody knows.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Mon, 20 Aug 2018 20:02:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-reset-EG-7-12-log-summary-to-blank/m-p/488335#M287397</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-20T20:02:08Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Copy vs fcopy function: Can anyone explain the performance difference</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-Copy-vs-fcopy-function-Can-anyone-explain-the-performance/m-p/486346#M126531</link>
      <description>&lt;P&gt;Actually, 2 minutes is fast here... the system is totally I/O bound. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm copying the file to a different directory on the same file system.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Mon, 13 Aug 2018 13:47:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-Copy-vs-fcopy-function-Can-anyone-explain-the-performance/m-p/486346#M126531</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-13T13:47:52Z</dc:date>
    </item>
    <item>
      <title>Proc Copy vs fcopy function: Can anyone explain the performance difference</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-Copy-vs-fcopy-function-Can-anyone-explain-the-performance/m-p/486194#M126459</link>
      <description>&lt;P&gt;I recently stumbled across the FCOPY function and quite frankly it's performance appears to be too good to be true.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm running on 64-Bit AIX, SAS 9.4 M5.&amp;nbsp; We have a permanent&amp;nbsp;SAS data set created daily that's almost a gigabyte in size, about 65 million long records that we copy to a user-accessible directory so users stay out of the production directory.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Proc Copy takes about 40 minutes to copy the data set and the index in one step.&amp;nbsp; I know that Fcopy copies files as binary images but it takes only about two minutes to do the same thing in two separate steps, data set then index.&amp;nbsp; That's almost unbelievable so I did it a few times at different times of the day.&amp;nbsp; Same performance.&amp;nbsp; I've never tried copying the files with the system mv command so I don't know how long takes.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I pulled a million records from the Proc Copy copy and compared them to the same records in the Fcopy copy (thank you Proc Compare) and no unequal values were found.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm not looking a gift horse in the mouth, but I'd like to understand why Fcopy is sooooo much faster than Proc Copy?&amp;nbsp;Is it that a binary copy process uses a bigger&amp;nbsp;block size or proc copy is has&amp;nbsp;a&amp;nbsp;validation/verification&amp;nbsp;step?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 12 Aug 2018 22:07:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-Copy-vs-fcopy-function-Can-anyone-explain-the-performance/m-p/486194#M126459</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-12T22:07:26Z</dc:date>
    </item>
    <item>
      <title>Re: proc copy and unix permissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/proc-copy-and-unix-permissions/m-p/485933#M126318</link>
      <description>&lt;P&gt;Wow.&amp;nbsp; It appears I didn't fully understand the one of the basics about Unix permissions.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Forgive me but I just verified your answer and you are correct.&amp;nbsp; umask 002 gives file permissions 664 on files and 775 on directories.&amp;nbsp; I thought everything started with 777!&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;A href="https://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html" target="_blank"&gt;https://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for everyone's help.&lt;/P&gt;</description>
      <pubDate>Fri, 10 Aug 2018 20:07:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/proc-copy-and-unix-permissions/m-p/485933#M126318</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-10T20:07:06Z</dc:date>
    </item>
    <item>
      <title>Re: proc copy and unix permissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/proc-copy-and-unix-permissions/m-p/485900#M126302</link>
      <description>&lt;P&gt;Wow, this is almost like IM'ing in real time.&amp;nbsp; Thanks to both of you for the fast replies.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Kurt, yes, the same instance of SAS runs the Proc Copy.&amp;nbsp; Actually, it runs soon after the "final" data set is created.&amp;nbsp; We move it because we don't want the users using datasets in our production directories.&amp;nbsp; No, the dataset doesn't exist in the target directory... we rename it as a backup immediately before copying the new one.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Reeza, I didn't look at Proc Datasets.&amp;nbsp; I'm so used to Proc Copy for this sort of thing I didn't consider proc datasets and the options it might have.&amp;nbsp; I'll give it a look and a test run.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Fri, 10 Aug 2018 18:00:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/proc-copy-and-unix-permissions/m-p/485900#M126302</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-10T18:00:32Z</dc:date>
    </item>
    <item>
      <title>proc copy and unix permissions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/proc-copy-and-unix-permissions/m-p/485882#M126293</link>
      <description>&lt;P&gt;We are submitting programs via EG 7.1 64-bit on Win10 for execution&amp;nbsp;on a 64-bit AIX server.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;We have a proc copy that's copying the data set just fine but the permissions in the target library aren't what we're expecting.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When the program runs, we use umask 002 and so In the source library&amp;nbsp;the data set permissions are 775.&amp;nbsp; But in the target library they're showing as 664.&amp;nbsp; It's not impacting usability but I'd like to know what's going on.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I haven't spoken with a SysAdmin yet but is it possible that the directory permissions are set to default to 664 so that's what they're defaulting to?&amp;nbsp; I thought I'd give the community first crack at telling me what's going on.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Different owner-ids&amp;nbsp;own each directory that the librefs point to, but the same group-id owns both of them.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Our work around is to run the X-command to change the permissions&amp;nbsp;&amp;nbsp;after the copy runs.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance for the help.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;John&lt;/P&gt;</description>
      <pubDate>Fri, 10 Aug 2018 17:23:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/proc-copy-and-unix-permissions/m-p/485882#M126293</guid>
      <dc:creator>bentleyj1</dc:creator>
      <dc:date>2018-08-10T17:23:23Z</dc:date>
    </item>
  </channel>
</rss>

