<?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>Patrick Tracker</title>
    <link>https://communities.sas.com/kntur85557/tracker</link>
    <description>Patrick Tracker</description>
    <pubDate>Sat, 03 Oct 2026 17:46:28 GMT</pubDate>
    <dc:date>2026-10-03T17:46:28Z</dc:date>
    <item>
      <title>Re: SAS CDE creates SAS datasets with restrictive file permissions on SAS Grid environment</title>
      <link>https://communities.sas.com/t5/SAS-Viya/SAS-CDE-creates-SAS-datasets-with-restrictive-file-permissions/m-p/992124#M3129</link>
      <description>&lt;P&gt;umask allows to define the maximum permissions, ACL's allow to define the minimum permissions.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For what you want, you could also on the top folder define an ACL for the desired minimum permissions and the setgid bit for the required group. Make sure you inherit this down for the files and folders that already exist under this top folder. Any newly created folder or file should then get these defined permissions and group independent on how the folder or file gets created.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 15 Aug 2026 02:40:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Viya/SAS-CDE-creates-SAS-datasets-with-restrictive-file-permissions/m-p/992124#M3129</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-08-15T02:40:31Z</dc:date>
    </item>
    <item>
      <title>Re: Capture SQL View Definition for Programmatic Change</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Capture-SQL-View-Definition-for-Programmatic-Change/m-p/990178#M380266</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/19879"&gt;@Quentin&lt;/a&gt;&amp;nbsp;The views in the target environment must point to the replicated data in the target environment. For this reason they must get re-created.&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;This environment with replicated production data is then what one can use to create other environment for various Dev &amp;amp; Test purposes and there one can then create links to the replicated data for anything file that doesn't need write access during the Dev or Test activities.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;Hope that makes sense.&lt;/P&gt;</description>
      <pubDate>Sun, 28 Jun 2026 05:49:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Capture-SQL-View-Definition-for-Programmatic-Change/m-p/990178#M380266</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-06-28T05:49:30Z</dc:date>
    </item>
    <item>
      <title>Re: Capture SQL View Definition for Programmatic Change</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Capture-SQL-View-Definition-for-Programmatic-Change/m-p/990170#M380263</link>
      <description>&lt;P&gt;Sorry for answering so late. I had a few rather busy weeks.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159"&gt;@Tom&lt;/a&gt;&amp;nbsp;Unfortunately things are still changing and also inconsistent. This metadata driven approach is only used for a portion of the view creation. Some views are also created directly fully coded spread out over a lot of scripts. And there is talk about getting rid of the metadata driven approach at all. That's why I'm aiming for an approach that doesn't rely on the code that created the views.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/19879"&gt;@Quentin&lt;/a&gt;&amp;nbsp;Symlinks are certainly not the solution. A view can be something like &lt;EM&gt;select &amp;lt;subset of source columns&amp;gt; from blah.table using libname blah "path to folder"&lt;/EM&gt;. I believe the only way is to re-create the view with a different "path to folder".&lt;/P&gt;</description>
      <pubDate>Sat, 27 Jun 2026 03:51:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Capture-SQL-View-Definition-for-Programmatic-Change/m-p/990170#M380263</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-06-27T03:51:54Z</dc:date>
    </item>
    <item>
      <title>Re: Difference between dates in SAS doesn't match results</title>
      <link>https://communities.sas.com/t5/SAS-Decision-Builder-Discussion/Difference-between-dates-in-SAS-doesn-t-match-results/m-p/989563#M28</link>
      <description>&lt;P&gt;Not knowing much about R syntax, what Copilot tells me sounds very convincing.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Patrick_0-1781175421157.png" style="width: 758px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/115797iDD10A2E9AA7372DE/image-dimensions/758x694?v=v2" width="758" height="694" role="button" title="Patrick_0-1781175421157.png" alt="Patrick_0-1781175421157.png" /&gt;&lt;/span&gt;&lt;BR /&gt;&lt;BR /&gt;I'm not going to post more AI answers I can't validate, but I'd suggest you use an AI, provide the SAS code and ask it to replicate this in R.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jun 2026 11:01:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Decision-Builder-Discussion/Difference-between-dates-in-SAS-doesn-t-match-results/m-p/989563#M28</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-06-11T11:01:46Z</dc:date>
    </item>
    <item>
      <title>Re: Capture SQL View Definition for Programmatic Change</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Capture-SQL-View-Definition-for-Programmatic-Change/m-p/989561#M380216</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Thanks for answering.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;There are no explicit scripts. The views get created metadata driven. Below an example of the main "table" for this.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Patrick_0-1781171674183.png" style="width: 1714px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/115796iDE863B9204FD35BE/image-dimensions/1714x257?v=v2" width="1714" height="257" role="button" title="Patrick_0-1781171674183.png" alt="Patrick_0-1781171674183.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;What I'm trying to do, is to create the data environment for an integration environment using the data from source that has been defined as "source of truth" and against which data needs to get reconciled (after running for another month).&lt;/P&gt;
&lt;P&gt;In theory I wouldn't have to bother about the views, because they should get re-created by such a run. ...but one can't be sure.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I could of course use the config Excels and the existing scripts from source to build some adhoc job for re-creating the views in the target environment, BUT... I really would like to avoid this. Things are done messy.&amp;nbsp;&lt;BR /&gt;What I would like to do, is to create the data (views included) for this integration environment without any dependency on any version of Excel config sheets or scripts.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;I hope this explains why I'm trying to extract and use the view definitions to re-create the views.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Regards, Patrick&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jun 2026 10:15:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Capture-SQL-View-Definition-for-Programmatic-Change/m-p/989561#M380216</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-06-11T10:15:13Z</dc:date>
    </item>
    <item>
      <title>Capture SQL View Definition for Programmatic Change</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Capture-SQL-View-Definition-for-Programmatic-Change/m-p/989544#M380211</link>
      <description>&lt;P&gt;Hi Experts,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I need to replicate a SAS 9.4 data environment in a Linux environment. Using rsync -av works like a charm for this.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The challenge I'm facing is that the source environment also contains SQL views in the form:&lt;/P&gt;
&lt;PRE&gt;select *
from lref.table
using libname lref "&amp;lt;source_root_path&amp;gt;/&amp;lt;relative path&amp;gt;";&lt;/PRE&gt;
&lt;P&gt;I need to re-create these views in the target environment by replacing the source_root_path with the target_root_path.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do you know of any other/better way than executing a SQL describe view, capture the log output in a file, parse out the view definition, change the path and then use this new code to create the views in the target environment?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I couldn't figure out any other way to retrieve the view definition.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks, Patrick&lt;/P&gt;</description>
      <pubDate>Thu, 11 Jun 2026 08:50:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Capture-SQL-View-Definition-for-Programmatic-Change/m-p/989544#M380211</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-06-11T08:50:30Z</dc:date>
    </item>
    <item>
      <title>Re: Question from a DBA on idle database session</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/Question-from-a-DBA-on-idle-database-session/m-p/986698#M30803</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/434008"&gt;@climbamnt&lt;/a&gt;&amp;nbsp;What you shared here just helped me figuring out what went wrong with my process. AND even better: MS Copilot found your contribution and shared the link with me.&lt;/P&gt;</description>
      <pubDate>Thu, 23 Apr 2026 03:36:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/Question-from-a-DBA-on-idle-database-session/m-p/986698#M30803</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-04-23T03:36:47Z</dc:date>
    </item>
    <item>
      <title>Re: SAS online on mainframe -   Is there a way to prevent execution of a DELETE command via SCL code</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-online-on-mainframe-Is-there-a-way-to-prevent-execution-of-a/m-p/986527#M379958</link>
      <description>&lt;P&gt;Copy/paste your question into MS Copilot 365.&lt;/P&gt;
&lt;P&gt;I can't fully validate the answer I've got, but it looked sensible to me.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Be aware that SAS/AF, SAS/FSP have been discontinued under SAS Viya (as well as "PC SAS") and though whatever you build using this technology becomes "technical debt".&lt;/P&gt;</description>
      <pubDate>Sat, 18 Apr 2026 09:37:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-online-on-mainframe-Is-there-a-way-to-prevent-execution-of-a/m-p/986527#M379958</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-04-18T09:37:40Z</dc:date>
    </item>
    <item>
      <title>Re: Bulk loading</title>
      <link>https://communities.sas.com/t5/Administration-and-Deployment/Bulk-loading/m-p/986526#M30793</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/481217"&gt;@Wiki-Ben&lt;/a&gt;&amp;nbsp;The screen shot looks like DI Studio. Correct?&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;I've asked Copilot 365 about performance when using bulkload=yes with SAS Access to ODBC and the answer was interesting (though don't know if correct):&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Patrick_0-1776503449212.png" style="width: 585px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/114308i53620BFD828EA200/image-dimensions/585x171?v=v2" width="585" height="171" role="button" title="Patrick_0-1776503449212.png" alt="Patrick_0-1776503449212.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So just based on the Copilot answers, it's likely better to go with what&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13976"&gt;@SASKiwi&lt;/a&gt;&amp;nbsp;proposed (increase the insertbuff value, set dbcommit=0). &lt;BR /&gt;If you are using SAS Access to SQL Server then of course bulkload=yes could might make a difference, especially when loading into an empty table.&lt;BR /&gt;&lt;BR /&gt;Bulkload=yes can be a libname or even a dataset option and though I would assume setting it in DIS will be sufficient on any level.&lt;BR /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 18 Apr 2026 09:16:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Administration-and-Deployment/Bulk-loading/m-p/986526#M30793</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-04-18T09:16:27Z</dc:date>
    </item>
    <item>
      <title>How to improve performance copying a huge table while also creating additional indexes</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-improve-performance-copying-a-huge-table-while-also/m-p/983487#M379494</link>
      <description>&lt;P&gt;Hi all,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm dealing with a case where analysts/modellers are dealing with Base SAS analytical tables that can get up-to 2.5TB in volume (compressed) with up-to 1000 variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Obviously such volumes are not ideal for adhoc analysis especially because there aren't many indexes on these tables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I can't do anything about these source tables and though what I'm thinking:&lt;/P&gt;
&lt;P&gt;Write a macro that allows these users to create a copy of such tables under their user folder with ideally only a sub-set of columns and added indexes of their choice.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Because even reading a 2.5TB table also takes really long, I'm trying to come-up with a table copy approach that performs as good as possible.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The environment is a SAS Grid, SAS 9.4M5, rhel with 32 cpu's per node (actual). The default for an EG session the users spawn are 4 nodes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below demo code is the best I could come up with and I'd love your advise if there is anything else I could do to improve performance both for creating the copy as well as query performance using where clauses.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I assume for the copy and index creation process it's all about minimizing i/o and passes through the data.&lt;/P&gt;
&lt;P&gt;For this reason, I've added creation of new indexes as data set option to the append base table ...but I don't really know if SAS will actually create these indexes via a single pass through the data together with the copy process or if creating the indexes later on via a proc datasets create index would perform the same.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm creating the target table using the spde engine. I don't have a lot of hands-on experience with this engine but I believe because the data copy needs to be under a user folder, there is no use for more than one data or index folder.&lt;/P&gt;
&lt;P&gt;About the number of partitions: Based on what I've read in the docu, I'm thinking about defining them as "size of source tables/number of actual cpu". Not sure if I got that right though.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And here the sample code (self contained and fully executable as is).&lt;/P&gt;
&lt;PRE&gt;options fullstimer msglevel=i dlcreatedir;
%let root_path=%sysfunc(pathname(work));
%let tbl      =analytical_table;

/*-- source table: existing analytical table with up to 2.5TB (compressed) and up to 1000 variables --*/
libname src "&amp;amp;root_path.\src";
data src.&amp;amp;tbl.;
  set sashelp.class;  
  array var_ {20} 8 ;
  do k=1 to 10000;
    do i=1 to dim(var_);
      var_[i]=i*_n_;
    end;
    output;
  end;
run;
proc sort data=src.&amp;amp;tbl. out=src.&amp;amp;tbl.(index=(name age n_a=(name age)));
  by name;
run;


/*-- target table: copy of analytical table with added indexes and reduced number of columns --*/

/* create required folders */
libname trg "&amp;amp;root_path.\trg"; 
libname trg "&amp;amp;root_path.\trg\spde_&amp;amp;tbl";

/* assign target library using spde engine */ 
libname trg spde "&amp;amp;root_path.\trg" datapath=("&amp;amp;root_path.\trg\spde_&amp;amp;tbl") indexpath=("&amp;amp;root_path.\trg\spde_&amp;amp;tbl") compress=char /*partsize=&amp;amp;gb_part_size.G*/;

/* create target table with added indexes and less columns */
proc datasets lib=trg nolist nowarn;
  delete &amp;amp;tbl.;
  run;
  append
    base=trg.&amp;amp;tbl.(index=(var_1 var_2 idx_01=(var_1 var_2)))
    data=src.&amp;amp;tbl.(keep=name--var_4)
    getsort
    ;
  run;
quit;

/* list indexes on target table */
proc sql;
  select *
  from dictionary.indexes
  where libname='TRG' and memname=%upcase("&amp;amp;tbl.")
  ;
quit;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks, Patrick&lt;/P&gt;</description>
      <pubDate>Sat, 14 Feb 2026 06:01:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-improve-performance-copying-a-huge-table-while-also/m-p/983487#M379494</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-02-14T06:01:01Z</dc:date>
    </item>
    <item>
      <title>Re: send  email +attach log file only in case of error or warning</title>
      <link>https://communities.sas.com/t5/SAS-Programming/send-email-attach-log-file-only-in-case-of-error-or-warning/m-p/982116#M379241</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159"&gt;@Tom&lt;/a&gt;&amp;nbsp;&lt;BR /&gt;Thank you both for your explanations.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So if SAS doesn't catch all errors and return them as error condition to the shell then one can't trust any scheduled process flow (lsf, airflow, ...) where child nodes only execute if all parent nodes executed without error.&lt;/P&gt;
&lt;P&gt;Do I get this right? And if yes how are you scheduling jobs?&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 18 Jan 2026 00:57:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/send-email-attach-log-file-only-in-case-of-error-or-warning/m-p/982116#M379241</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-01-18T00:57:44Z</dc:date>
    </item>
    <item>
      <title>Re: send  email +attach log file only in case of error or warning</title>
      <link>https://communities.sas.com/t5/SAS-Programming/send-email-attach-log-file-only-in-case-of-error-or-warning/m-p/982112#M379238</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt;&amp;nbsp;Why did you have to scan the SAS log and couldn't just check for the exit code of the process?&lt;/P&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159549"&gt;@Ronein&lt;/a&gt;&amp;nbsp;Please provide more detail how you run your daily job? Are you using a scheduler or are you just submitting the job every day? Which environment are you using (OS and potentially scheduler), is it a SAS grid or a single machine, ideally share your batch command with us.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 17 Jan 2026 03:22:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/send-email-attach-log-file-only-in-case-of-error-or-warning/m-p/982112#M379238</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-01-17T03:22:06Z</dc:date>
    </item>
    <item>
      <title>Re: How to switch between different projects using EG?</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-switch-between-different-projects-using-EG/m-p/981607#M46349</link>
      <description>&lt;P&gt;If you're talking about the server side SAS sessions then with EG you can only have one session at a time per server you connect to.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can always disconnect/reconnect to the server to spawn a new session.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can connect to different app servers (if available) with separate sessions and you can select on which app server to execute a program.&lt;/P&gt;
&lt;P&gt;You can also have two EG projects open (=EG started twice) and they will create separate sessions.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 07 Jan 2026 04:09:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/How-to-switch-between-different-projects-using-EG/m-p/981607#M46349</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-01-07T04:09:40Z</dc:date>
    </item>
    <item>
      <title>Re: Download Dataset From SAS Server to Local Folder</title>
      <link>https://communities.sas.com/t5/SAS-Enterprise-Guide/Download-Dataset-From-SAS-Server-to-Local-Folder/m-p/981593#M46352</link>
      <description>&lt;P&gt;Below a Gemini answer when using Google Chrome that looks right to me:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Patrick_0-1767739362593.png" style="width: 624px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/112520iD3C7D86AA22DDDF0/image-dimensions/624x297?v=v2" width="624" height="297" role="button" title="Patrick_0-1767739362593.png" alt="Patrick_0-1767739362593.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 06 Jan 2026 22:47:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Enterprise-Guide/Download-Dataset-From-SAS-Server-to-Local-Folder/m-p/981593#M46352</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2026-01-06T22:47:23Z</dc:date>
    </item>
    <item>
      <title>Re: Need help with merging two different data sets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-help-with-merging-two-different-data-sets/m-p/981358#M379090</link>
      <description>&lt;P&gt;Not really sure if that's the ideal data structure for your t-test but below what you've been asking for.&lt;/P&gt;
&lt;P&gt;Please note that I've changed the year in the last row for data A so it matches what you show us as desired result.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data A;
    infile datalines dsd truncover dlm=' ';
    length TICKER $5;
    input TICKER $ YEARP BSIZEP;
datalines;
ACGN 2019 8
ACRS 2019 8
ADAP 2018 10
;
run;

proc sort data=a;
  by ticker yearp;
run;

data B;
    infile datalines dsd truncover dlm=' ';
    length TICKER $5;
    input TICKER $ YEAR DBSIZE;
datalines;
ACGN 2020 7
ACGN 2021 7
ACMR 2021 5
ACRS 2020 9
ADAP 2020 9
;
run;

proc sort data=b;
  by ticker year;
run;

data want;
  merge a b;
  by ticker;
  output;
  call missing(of _all_);
run;

proc print data=want;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Patrick_0-1767055211203.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/112452iCD761CFE748070CA/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Patrick_0-1767055211203.png" alt="Patrick_0-1767055211203.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 30 Dec 2025 00:41:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-help-with-merging-two-different-data-sets/m-p/981358#M379090</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2025-12-30T00:41:25Z</dc:date>
    </item>
    <item>
      <title>Re: Sub-String Theory: Reducing duplicate substrings to single substrings</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Sub-String-Theory-Reducing-duplicate-substrings-to-single/m-p/981355#M379088</link>
      <description>&lt;P&gt;Below a possible approach.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  infile datalines truncover;
  input have_string $200.;
  datalines;
Los Lunas/Corona/Corona/White Mountain/White Mountain
;

data want(drop=_:);
  if _n_=1 then
    do;
      length _term $50;
      dcl hash h1();
      h1.defineKey('_term');
      h1.defineDone();
      
    end;
    
  set have;
  
  if 0 then want_string=have_string;
    
  do _i=1 to countc(have_string,'/')+1;
    _term=scan(have_string,_i,'/');
    if h1.check() ne 0 then
      do;
        want_string=catx('/',want_string,_term);
        _rc=h1.add();
      end;
  end;
  
  _rc=h1.clear();
 run;
 
 proc print data=want;
 run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Patrick_0-1767052952578.png" style="width: 671px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/112451i14281179FDA8C661/image-dimensions/671x57?v=v2" width="671" height="57" role="button" title="Patrick_0-1767052952578.png" alt="Patrick_0-1767052952578.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 30 Dec 2025 00:02:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Sub-String-Theory-Reducing-duplicate-substrings-to-single/m-p/981355#M379088</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2025-12-30T00:02:56Z</dc:date>
    </item>
    <item>
      <title>Re: Code to search for .zipx files in a Windows directory and export list to Excel?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Code-to-search-for-zipx-files-in-a-Windows-directory-and-export/m-p/980939#M379013</link>
      <description>&lt;P&gt;Can you run dos commands out of SAS in your environment? If you don't know then run below. If it shows XCMD in the SAS log then you can, if it's NOXCMD then you can't.&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc options option=xcmd;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you can run dos commands then something like below gets you the list.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* list all .zipx files under c:\temp and sub-folders */ 
data work.my_zipx;
  infile 'dir "C:\temp\*.zipx" /S /B' pipe truncover;
  input myfiles:$1000.;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And once you've got the files in a SAS table, you can use Proc Export or ODS EXCEL to write the table to Excel.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Or even "lazier" just write the found files to a .csv text file that you can open directly via Excel.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* list all .zipx files under c:\temp and sub-folders and write records to C:\temp\zipx_files.csv */ 
data _null_;
  file "C:\temp\zipx_files.csv";
  infile 'dir "C:\temp\*.zipx" /S /B' pipe truncover;
  input;
  put _infile_;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 18 Dec 2025 01:09:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Code-to-search-for-zipx-files-in-a-Windows-directory-and-export/m-p/980939#M379013</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2025-12-18T01:09:52Z</dc:date>
    </item>
    <item>
      <title>Re: Exam 000-240 – Am I Ready?</title>
      <link>https://communities.sas.com/t5/SAS-Software-for-Learning/Exam-000-240-Am-I-Ready/m-p/980751#M2781</link>
      <description>&lt;P&gt;It's long since I've done a SAS cert but at that time passing the practice exam was a very good indication how I'll be doing at the exam.&lt;/P&gt;</description>
      <pubDate>Mon, 15 Dec 2025 00:19:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Software-for-Learning/Exam-000-240-Am-I-Ready/m-p/980751#M2781</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2025-12-15T00:19:12Z</dc:date>
    </item>
    <item>
      <title>Re: LAG function bad for copilot...shall I trust copilot?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/LAG-function-bad-for-copilot-shall-I-trust-copilot/m-p/980741#M378986</link>
      <description>&lt;P&gt;What Copilot tells you is true for:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;pay=cum_pay - lag(cum_pay);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;But in your logic you then populate variable pay again with start_pay whenever the condition becomes true - and the condition will always be true&amp;nbsp;if there is a&amp;nbsp;&lt;STRONG&gt;different ID/employerID/tax year &lt;/STRONG&gt;and though the issue Copilot flags won't come into effect.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;if personid~= lag(personid)
   or employerid~= lag(employerid) 
   or tax_year_start~=lag(tax_year_start)
then pay=start_pay; &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You could consider to express your logic as below.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data pay_data;
  set sorted_data;
  by personID employerid tax_year_start payment_date;
  pay=cum_pay - lag(cum_pay);
  if first.tax_year_start then pay=start_pay;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Note: lag(cum_pay) needs to execute for every row and though can't get moved to an else condition.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 14 Dec 2025 02:20:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/LAG-function-bad-for-copilot-shall-I-trust-copilot/m-p/980741#M378986</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2025-12-14T02:20:49Z</dc:date>
    </item>
    <item>
      <title>Re: add single quotes to all macro var components</title>
      <link>https://communities.sas.com/t5/SAS-Programming/add-single-quotes-to-all-macro-var-components/m-p/980357#M378930</link>
      <description>&lt;P&gt;The code I've posted &lt;A href="https://communities.sas.com/t5/SAS-Programming/sas-add-single-quotes-for-each-argument-in-macro-variable/m-p/980268" target="_self"&gt;here&lt;/A&gt; will also work for this macro variable. I wouldn't directly change the macro var itself but create a new one.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let allv_y2=%sysfunc(prxchange(s/(\w+)/'$1'/,-1,&amp;amp;allv_y));
%put &amp;amp;=allv_y2;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And if you also want to replace multiple blanks with a single blank then below should do.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let allv_y3=%sysfunc(prxchange(s/(\w+)( *)/'$1' /,-1,&amp;amp;allv_y));
%put &amp;amp;=allv_y3;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For your data step syntax: Just assign the max length of 32767. It's only one iteration of a data _null_ step and though performance impact of a too long var will be minimal.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 08 Dec 2025 07:44:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/add-single-quotes-to-all-macro-var-components/m-p/980357#M378930</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2025-12-08T07:44:28Z</dc:date>
    </item>
  </channel>
</rss>

