<?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>Quentin Tracker</title>
    <link>https://communities.sas.com/kntur85557/tracker</link>
    <description>Quentin Tracker</description>
    <pubDate>Thu, 23 Jul 2026 13:04:38 GMT</pubDate>
    <dc:date>2026-07-23T13:04:38Z</dc:date>
    <item>
      <title>Re: Downloading a directory of *.sas files</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Downloading-a-directory-of-sas-files/m-p/991167#M380327</link>
      <description>&lt;P&gt;Edit: My thinking below is wrong.&amp;nbsp; After reading Tom's post, I now see the error message is about writing&amp;nbsp;&lt;SPAN&gt;Batchfile 7.6.zip, not reading&amp;nbsp;Batchfile 7.6.sas (which likely does not exist).&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;It looks to me like the OS doesn't want to write the zip file to the same directory you are currently reading from.&amp;nbsp; So Tom's suggestion to write it somewhere else makes sense to me:&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;filename out zip '/home/u44673568/Batchfile 7.6.zip';&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;____&lt;/P&gt;
&lt;P&gt;So you have a file named&amp;nbsp;&lt;SPAN&gt;Batchfile 7.6.sas in:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt; /home/u44673568/Meteor Analysis and Data/Camera Network Optimization/NMMA OptModel/OptModel4GMN/Batchfile 7.6&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Is that correct?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;It looks like SAS is finding the file, when it runs DREAD on the directory, but the INPUT statement can't read the file.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Check the permissions on the file itself:&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;ls -l /home/u44673568/Meteor Analysis and Data/Camera Network Optimization/NMMA OptModel/OptModel4GMN/Batchfile 7.6/Batchfile 7.6.sas&lt;/PRE&gt;
&lt;P&gt;&lt;SPAN&gt;I think that will show that your SAS job does not have read access to the file itself.&amp;nbsp; If so, you can use CHMOD to change the permissions (assuming you own the file).&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 22 Jul 2026 14:08:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Downloading-a-directory-of-sas-files/m-p/991167#M380327</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-22T14:08:40Z</dc:date>
    </item>
    <item>
      <title>Re: Connecting SAS to Snowflake via ODBC using SSO from external browser</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Connecting-SAS-to-Snowflake-via-ODBC-using-SSO-from-external/m-p/990934#M21086</link>
      <description>&lt;P&gt;Hi, did you make any progress on this?&lt;/P&gt;</description>
      <pubDate>Thu, 16 Jul 2026 12:56:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Connecting-SAS-to-Snowflake-via-ODBC-using-SSO-from-external/m-p/990934#M21086</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-16T12:56:05Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Python</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-Python/m-p/990783#M380308</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/436401"&gt;@johatc&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;Proc Python is now available for SAS 9.4M9 on the following operating environments:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;SPAN&gt;Windows&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Windows for x64&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;64-bit Enabled AIX&lt;/SPAN&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Linux for x64&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;See&amp;nbsp;&lt;A href="https://sas.service-now.com/csm/en/the-python-procedure-is-available-for-sas-9-4m9-ts1m9?id=kb_article_view&amp;amp;sysparm_article=KB0046084" target="_blank" rel="noopener"&gt;KB0046084&lt;/A&gt; The PYTHON procedure is available for SAS® 9.4M9 (TS1M9)&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Thanks for this wonderful news!!!&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/4"&gt;@ChrisHemedinger&lt;/a&gt;&amp;nbsp;I know this is an old thread, but is it possible to mark&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/436401"&gt;@johatc&lt;/a&gt;&amp;nbsp;'s answer as correct?&amp;nbsp; Would be good to have this answer up top for the google searches.&amp;nbsp; This is GREAT news that PROC PYTHON is now available to all.&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-unicode-emoji" title=":party_popper:"&gt;🎉&lt;/span&gt;&lt;span class="lia-unicode-emoji" title=":party_popper:"&gt;🎉&lt;/span&gt;&lt;span class="lia-unicode-emoji" title=":party_popper:"&gt;🎉&lt;/span&gt;&lt;span class="lia-unicode-emoji" title=":party_popper:"&gt;🎉&lt;/span&gt;&lt;span class="lia-unicode-emoji" title=":party_popper:"&gt;🎉&lt;/span&gt;&lt;span class="lia-unicode-emoji" title=":party_popper:"&gt;🎉&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 13 Jul 2026 13:05:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-Python/m-p/990783#M380308</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-13T13:05:51Z</dc:date>
    </item>
    <item>
      <title>Re: Change cstars colors in proc gradar</title>
      <link>https://communities.sas.com/t5/Graphics-Programming/Change-cstars-colors-in-proc-gradar/m-p/990598#M25957</link>
      <description>&lt;P&gt;I found a new use-case for AI programming with SAS.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Since you didn't provide data, I showed it a picture of your chart, and your SAS code, and it generated sample data:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data longnew;
  length DM_range $10 texture_label $20;
  input DM_range $ texture_order texture_label $ texture_value;
  datalines;
15_20 1 Creamy 18
15_20 2 Dry 13
15_20 3 Mushy 19
15_20 4 None 5
15_20 5 Smooth 12
15_20 6 Stringy 8
15_20 7 Watery 25
20_25 1 Creamy 15
20_25 2 Dry 6
20_25 3 Mushy 20
20_25 4 None 5
20_25 5 Smooth 26
20_25 6 Stringy 8
20_25 7 Watery 20
25_30 1 Creamy 12
25_30 2 Dry 7
25_30 3 Mushy 20
25_30 4 None 5
25_30 5 Smooth 18
25_30 6 Stringy 8
25_30 7 Watery 30
30_35 1 Creamy 8
30_35 2 Dry 8
30_35 3 Mushy 20
30_35 4 None 5
30_35 5 Smooth 13
30_35 6 Stringy 10
30_35 7 Watery 36
&amp;lt;15 1 Creamy 10
&amp;lt;15 2 Dry 24
&amp;lt;15 3 Mushy 20
&amp;lt;15 4 None 5
&amp;lt;15 5 Smooth 10
&amp;lt;15 6 Stringy 6
&amp;lt;15 7 Watery 25
;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And also generated this GRADAR step, which lists 5 values for cstars and wstars.&amp;nbsp; Your code only has two:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;footnote1 j=c h=10pt 'N = 502';
title1 j=c h=13pt 'Comparison of textures by DM range for BL516 (relative %)';

proc gradar data=longnew;
  chart texture_label / freq=texture_value
    overlay=DM_range
    starcircles=(25 50)
    cstarcircles=black
    cstars=(aqua red green brown purple)  /*updated*/
    wstars=(2 2 2 2 2)   /*updated*/
    cframe=white
  ;
run;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 08 Jul 2026 21:19:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Graphics-Programming/Change-cstars-colors-in-proc-gradar/m-p/990598#M25957</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-08T21:19:29Z</dc:date>
    </item>
    <item>
      <title>Re: Loading SAS Data with Formats to Object Storage Parquet</title>
      <link>https://communities.sas.com/t5/SAS-Communities-Library/Loading-SAS-Data-with-Formats-to-Object-Storage-Parquet/tac-p/990581#M12072</link>
      <description>&lt;P&gt;I don't think you can get it to work in 9.4 without external tools (python etc), unfortunately.&amp;nbsp; I thought I head at SAS Innovate a couple years ago that the Duck DB engine would come to 9.4, but, sadly, apparently this is not the case:&amp;nbsp;&lt;A href="https://communities.sas.com/t5/SAS-Data-Management/SAS-Connection-to-Duckdb/td-p/949322" target="_blank"&gt;https://communities.sas.com/t5/SAS-Data-Management/SAS-Connection-to-Duckdb/td-p/949322&lt;/A&gt;&amp;nbsp; .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That said, PROC PYTHON is coming to 9.4M10 (&lt;A href="https://communities.sas.com/t5/SAS-Innovate-Presentations/SAS-9-4-M10-Continuing-Support-and-Roadmap-in-the-Era-of-Viya/ta-p/988049" target="_blank"&gt;https://communities.sas.com/t5/SAS-Innovate-Presentations/SAS-9-4-M10-Continuing-Support-and-Roadmap-in-the-Era-of-Viya/ta-p/988049&lt;/A&gt;&amp;nbsp;) so that should provide a way to read Parquet, and lots of other stuff, without leaving your SAS session.&amp;nbsp; You can probably do it&amp;nbsp; now in earlier maintenance releases using PROC FCMP interface to python.&lt;/P&gt;</description>
      <pubDate>Wed, 08 Jul 2026 13:10:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Communities-Library/Loading-SAS-Data-with-Formats-to-Object-Storage-Parquet/tac-p/990581#M12072</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-08T13:10:29Z</dc:date>
    </item>
    <item>
      <title>Re: ods excel file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/ods-excel-file/m-p/990446#M380286</link>
      <description>&lt;P&gt;This is &lt;STRONG&gt;not&amp;nbsp;&lt;/STRONG&gt;how I would recommend structuring the code, there are better ways to solve this problem.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But as I had 15 minutes before leaving for a holiday weekend, and I was enthralled by the Italian, I took your code, simplified it a bit, and made some test data.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The below code I think does what you would want.&amp;nbsp; You can see I pulled the ODS Excel statement outside of the loop, and made a few other changes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can play with this, or with this working example, someone else will write a better-designed macro solution for you.&amp;nbsp; This is a common macro problem: read in a control dataset with a list of datasets, and print each dataset.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;*make some test data;

data ADDEBITI ;
  set sashelp.class ;
run ;

data POLIZZE ;
  set sashelp.shoes ;
run ;


*control dataset with list of datasets to print;
data Riepilogo_righe_2 ;
  TABELLA='ADDEBITI' ; DIREZIONE='class' ; output ;
  TABELLA='POLIZZE' ; DIREZIONE='shoes' ; output ;
run ;
  

%macro multiple (DATA=,);
  /* Conta quante tabelle ci sono */
  proc sql noprint;
    select count(*) into :ntot
    from Riepilogo_righe_2;
  quit;

  ods excel file="%sysfunc(pathname(work))/foo.xlsx"   ;

  %do i = 1 %to &amp;amp;ntot.;

    /* Prende il nome della tabella i-esima */
    proc sql noprint;
      select LEFT(trim(TABELLA)), LEFT(trim(DIREZIONE)) 
      into :nome, :des 

      from Riepilogo_righe_2
      where monotonic() = &amp;amp;i ;
    quit;

    %put &amp;amp;nome.; 
    %PUT &amp;amp;NTOT.;
    %put &amp;amp;DES.;

    %if %sysfunc(find(&amp;amp;nome, ADDEBITI, i)) &amp;gt; 0 %then %do;
      %put Condition 1 is met;
      /* Add your SAS statements here */


      ods excel options( 
        sheet_name='Addebiti'
      );

      proc print data=&amp;amp;nome.;
      run;
    %end;

    %else %if %sysfunc(find(&amp;amp;nome, POLIZZE, i)) &amp;gt; 0 %then %do;
        %put Condition 2 is met;
        /* Add different statements here */

      ods excel options(
        sheet_name='Polizze'
      );

      proc print data=&amp;amp;nome. ;
      run;

    %end;

    %else %do;
        %put No conditions were met;
    %end;

  %END;

  ods _all_ close ;	

%mend multiple;

%multiple()&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 02 Jul 2026 20:52:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/ods-excel-file/m-p/990446#M380286</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-02T20:52:54Z</dc:date>
    </item>
    <item>
      <title>SAS Viya Copilot Public Chat Interface</title>
      <link>https://communities.sas.com/t5/SAS-Product-Suggestions/SAS-Viya-Copilot-Public-Chat-Interface/idi-p/990438</link>
      <description>&lt;P&gt;SAS Viya Copilot sounds amazing and there is tremendous value in having it integrated into different SAS IDEs / applications.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I think there would also be value in exposing SAS Viya Copilot via a public (free) web chat interface.&amp;nbsp; This would be an opportunity for people who don't have Viya to see how smart Viya Copilot is at debugging SAS code and generating SAS code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Obviously a chat interface would not be that useful for production use, where you want it to have access to your full code base, etc.&amp;nbsp; But I'm sure talking SAS with SAS Viya Copilot would be an even better experience than talking SAS with Chat GPT or Claude.&amp;nbsp; It would serve as a public advertisement for how great Viya Copilot is, and entice more users to advocate for Viya adoption.&lt;/P&gt;</description>
      <pubDate>Thu, 02 Jul 2026 18:41:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Product-Suggestions/SAS-Viya-Copilot-Public-Chat-Interface/idi-p/990438</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-02T18:41:17Z</dc:date>
    </item>
    <item>
      <title>Re: ods excel file</title>
      <link>https://communities.sas.com/t5/SAS-Programming/ods-excel-file/m-p/990432#M380283</link>
      <description>&lt;P&gt;Can you please post the log from running the code?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;Also please describe the problem you're having.&amp;nbsp; Are there errors in the log?&amp;nbsp; Is the Excel output created but something is wrong about it?&lt;/P&gt;</description>
      <pubDate>Thu, 02 Jul 2026 17:41:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/ods-excel-file/m-p/990432#M380283</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-02T17:41:36Z</dc:date>
    </item>
    <item>
      <title>Re: PROC DOCUMENT</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-DOCUMENT/m-p/990431#M84154</link>
      <description>&lt;P&gt;Glad you found a solution.&amp;nbsp; Curious if you try the AI's code if it will work (even if not optimal for your call execute solution).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'm using GitHub Copilot in VS code with the SAS Extension.&amp;nbsp; GitHub Copilot automatically picks an LLM.&amp;nbsp; Looks like it used GPT-5.4 mini for my questions.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When I have test data, it will actually write a program, then ask if it can batch submit it.&amp;nbsp; If I say yes, it will run the program, then check the log for errors, and iterate until it gets fixed.&amp;nbsp; Crazy stuff!&lt;/P&gt;</description>
      <pubDate>Thu, 02 Jul 2026 16:31:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-DOCUMENT/m-p/990431#M84154</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-02T16:31:37Z</dc:date>
    </item>
    <item>
      <title>Re: PROC DOCUMENT</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-DOCUMENT/m-p/990425#M84152</link>
      <description>&lt;P&gt;I don't know PROC DOCUMENT well, but I've been playing with AI for SAS coding, so please take below suggestions with a large grain of salt.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;AI points to a small typo in your code.&amp;nbsp; This line has a leading backslash you don't want:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;SETLABEL \site1\group2\fut1_2 "Future";&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;but that's probably not the cause of the&amp;nbsp; problem.&amp;nbsp; AI also claims:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;"&lt;/P&gt;
&lt;P&gt;That behavior is consistent with PROC DOCUMENT building the tree top-down and resolving paths as it goes. When&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;COPY \work.overview1\Print#1\Print#1 to site1;&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;runs at the top, SAS is touching&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;site1&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;before the rest of the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;site1\group1&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;branch exists. If that copied object changes the current document context or occupies&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;site1&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;as a node in a way SAS doesn’t expect, later&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;MAKE site1\group1;&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;can be seen as an invalid path. When you move the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;COPY&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;to the bottom, the full&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;site1&lt;/CODE&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;subtree already exists, so the copy lands in a valid destination and the error disappears.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;The safe pattern here is: create all parent nodes first with&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;MAKE&lt;/CODE&gt;, then do the&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;COPY&lt;/CODE&gt;s, then&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;CODE&gt;SETLABEL&lt;/CODE&gt;s. If you want, I can rewrite the block into a clean order that avoids this class of PROC DOCUMENT path errors.&lt;/P&gt;
&lt;P&gt;"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And it then rewrote the code to:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc document name=work.forreplay(write);

  /* Site 1 */
  make site1;
  setlabel site1 "Site: 1";

  /* Group 1 */
  make site1\group1;
  setlabel site1\group1 "Group 1";

  make site1\group1\past1_1;
  setlabel site1\group1\past1_1 "Past";

  make site1\group1\pres1_1;
  setlabel site1\group1\pres1_1 "Present";

  make site1\group1\fut1_1;
  setlabel site1\group1\fut1_1 "Future";

  /* Group 2 */
  make site1\group2;
  setlabel site1\group2 "Group 2";

  make site1\group2\past1_2;
  setlabel site1\group2\past1_2 "Past";

  make site1\group2\pres1_2;
  setlabel site1\group2\pres1_2 "Present";

  make site1\group2\fut1_2;
  setlabel site1\group2\fut1_2 "Future";

  /* Site 2 */
  make site2;
  setlabel site2 "Site: 2";

  /* Group 3 */
  make site2\group1;
  setlabel site2\group1 "Group 3";

  make site2\group1\past2_1;
  setlabel site2\group1\past2_1 "Past";

  make site2\group1\pres2_1;
  setlabel site2\group1\pres2_1 "Present";

  make site2\group1\fut2_1;
  setlabel site2\group1\fut2_1 "Future";

  /* Copy output objects after the tree exists */
  copy \work.overview1\Print#1\Print#1 to site1;
  copy \work.past1_1\Print#1\Print#1 to site1\group1\past1_1;
  copy \work.pres1_1\Print#1\Print#1 to site1\group1\pres1_1;
  copy \work.fut1_1\Print#1\Print#1 to site1\group1\fut1_1;

  copy \work.past1_2\Print#1\Print#1 to site1\group2\past1_2;
  copy \work.pres1_2\Print#1\Print#1 to site1\group2\pres1_2;
  copy \work.fut1_2\Print#1\Print#1 to site1\group2\fut1_2;

  copy \work.past2_1\Print#1\Print#1 to site2\group1\past2_1;
  copy \work.pres2_1\Print#1\Print#1 to site2\group1\pres2_1;
  copy \work.fut2_1\Print#1\Print#1 to site2\group1\fut2_1;

  run;

ods document close;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;It didn't actually run the code (because no test data to create the objects), so definitely could be wrong!&lt;/P&gt;</description>
      <pubDate>Thu, 02 Jul 2026 13:07:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-DOCUMENT/m-p/990425#M84152</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-02T13:07:21Z</dc:date>
    </item>
    <item>
      <title>Re: PROC DOCUMENT</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-DOCUMENT/m-p/990423#M84150</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/285012"&gt;@SwissC&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;Not sure if you see the same but in my view of the page, the code box is not displaying correctly, I did honestly but each line of code on separate lines.&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR /&gt;I fixed the code block for you.&amp;nbsp; It's a weird bug in the message interface.&amp;nbsp; Not your fault.&lt;/P&gt;</description>
      <pubDate>Thu, 02 Jul 2026 12:39:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-DOCUMENT/m-p/990423#M84150</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-02T12:39:28Z</dc:date>
    </item>
    <item>
      <title>Re: How do I create a data file with specific variables I have computed?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/How-do-I-create-a-data-file-with-specific-variables-I-have/m-p/990413#M84149</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/19879"&gt;@Quentin&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;When you say you want the variable s "spit out" you mean you want them included in the output dataset named final?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If so, it looks like you could add them to the keep list here:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data fit(keep=soc crit_typ distance fitval);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;You would need to re-compile the macro (submit the code between %macro and %mend) and then call the macro, with the macro call shown at the bottom of your code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%merge1(cut=30,folder=EAS, client=Dennis test 1, filename=dtest1_jas, var1=battlink, value1=MW, var2=, value2=, clifam1=, clifam2=)&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I just noticed there is no %MEND statement in the code you posted.&amp;nbsp; In your real code that should be the bottom of the macro definition.&lt;/P&gt;</description>
      <pubDate>Wed, 01 Jul 2026 21:50:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/How-do-I-create-a-data-file-with-specific-variables-I-have/m-p/990413#M84149</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-01T21:50:23Z</dc:date>
    </item>
    <item>
      <title>Re: How do I create a data file with specific variables I have computed?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/How-do-I-create-a-data-file-with-specific-variables-I-have/m-p/990388#M84144</link>
      <description>&lt;P&gt;When you say you want the variable s "spit out" you mean you want them included in the output dataset named final?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If so, it looks like you could add them to the keep list here:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data fit(keep=soc crit_typ distance fitval);&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 01 Jul 2026 18:04:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/How-do-I-create-a-data-file-with-specific-variables-I-have/m-p/990388#M84144</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-01T18:04:53Z</dc:date>
    </item>
    <item>
      <title>Re: Upgraded to VIYA LTS2025.09, now macro code throws an error after 5 years of running.</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Upgraded-to-VIYA-LTS2025-09-now-macro-code-throws-an-error-after/m-p/990368#M380275</link>
      <description>&lt;P&gt;In the code you showed:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%create_state_tab(&amp;amp;next_name); &lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;is definitely calling a&amp;nbsp; macro named create_state_tab.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The question you need to solve is, where is that macro definition stored?&amp;nbsp; It could be in the program you ran, it could be in an autocall library, it could be in a (sigh) compiled macro library that the consultants delivered but don't want you to know what is in it.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;First you need to figure out where the macro definition is (should be) and then you can work on figuring out why your current session isn't able to find the definition.&amp;nbsp; Could be something as basic as a different value for the sasautos option.&amp;nbsp; Or maybe a permissions change on the OS.&lt;/P&gt;</description>
      <pubDate>Wed, 01 Jul 2026 16:36:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Upgraded-to-VIYA-LTS2025-09-now-macro-code-throws-an-error-after/m-p/990368#M380275</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-01T16:36:03Z</dc:date>
    </item>
    <item>
      <title>Re: Update a variable’s value based on the value of another variable</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Update-a-variable-s-value-based-on-the-value-of-another-variable/m-p/990319#M43982</link>
      <description>&lt;P&gt;You're analyzing a dataset that is actually a report, not data.&amp;nbsp; It's the same problem as your post last week:&amp;nbsp;&lt;A href="https://communities.sas.com/t5/New-SAS-User/Add-white-row-before-a-variable-value/m-p/990126#M43967" target="_blank"&gt;https://communities.sas.com/t5/New-SAS-User/Add-white-row-before-a-variable-value/m-p/990126#M43967&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Do you see any logic you could use to derive have1 from have? I think all you could do is hard code it:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;if Class2="Specific_value" then value=5 ;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;which is obviously not a solution.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The correct way to create have1 would be to get access to the data that was the source for these counts.&amp;nbsp; Then you can calculate any count you want.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 01 Jul 2026 12:54:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Update-a-variable-s-value-based-on-the-value-of-another-variable/m-p/990319#M43982</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-07-01T12:54:13Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SORT: NODUPKEY - 중복값 제거</title>
      <link>https://communities.sas.com/t5/SAS-Tech-Tip/PROC-SORT-NODUPKEY-%EC%A4%91%EB%B3%B5%EA%B0%92-%EC%A0%9C%EA%B1%B0/tac-p/990280#M1689</link>
      <description>&lt;P&gt;NODUP, which is and alias for NODUPRECS, has been removed from the documentation but is still useable for backwards compatibility reasons.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Instead of using NODUP, most people recommend using&amp;nbsp;&lt;SPAN&gt;NODUPKEY and sorting BY _ALL_ which can be trusted to give the result that is usually expected.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 30 Jun 2026 17:24:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Tech-Tip/PROC-SORT-NODUPKEY-%EC%A4%91%EB%B3%B5%EA%B0%92-%EC%A0%9C%EA%B1%B0/tac-p/990280#M1689</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-06-30T17:24:38Z</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/990214#M380268</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/12447"&gt;@Patrick&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&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;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I think we're talking past each other a bit.&amp;nbsp; I understand the views must be recreated, because views sometimes don't migrate etc.&amp;nbsp; But I think symlinks can help you avoid changing the code that creates the view.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I just played with it, and it worked as I expect.&amp;nbsp; Given a view like you have:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create view test as 
  select * 
  from source.myclass
  using libname source "~/sourcerootpath"
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I made a symlink ~/sourcerootpath which points to the target directory.&amp;nbsp; With that setup, I can point the symlink to anywhere on my target server, the view works.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;So on your target server, creating a symlink should allow you to avoid updating the view definition to have a different path.&lt;/P&gt;</description>
      <pubDate>Mon, 29 Jun 2026 13:50:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Capture-SQL-View-Definition-for-Programmatic-Change/m-p/990214#M380268</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-06-29T13:50:39Z</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/990177#M380265</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/12447"&gt;@Patrick&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;&lt;BR /&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;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Why couldn't symlinks work?&amp;nbsp; I'm assuming on your source server, all your data is sitting buried within one directory tree, e.g.:&lt;/P&gt;
&lt;PRE&gt;/sourcerootpath/Data/Project1/...
/sourcerootpath/Data/Project2/...&lt;/PRE&gt;
&lt;P&gt;And when you copied the files to the target, they went to something like:&lt;/P&gt;
&lt;PRE&gt;/targetrootpath/Data/Project1/...
/targetrootpath/Data/Project2/...&lt;/PRE&gt;
&lt;P&gt;So on the target server, if your created a symlink /sourcerootpath which points to the existing directory /targetrootpath, then all of the original views and code that point to /sourcerootpath would magically work, wouldn't they?&lt;/P&gt;</description>
      <pubDate>Sat, 27 Jun 2026 21:42:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Capture-SQL-View-Definition-for-Programmatic-Change/m-p/990177#M380265</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-06-27T21:42:53Z</dc:date>
    </item>
    <item>
      <title>Re: Native conversational LLM chat interface for SAS 9.4 Foundation (SAS Studio / Enterprise Guide)</title>
      <link>https://communities.sas.com/t5/SAS-Product-Suggestions/Native-conversational-LLM-chat-interface-for-SAS-9-4-Foundation/idc-p/990153#M808</link>
      <description>&lt;P&gt;I like this idea, but in a sense SAS has already implemented it.&amp;nbsp; SAS 9 users don't have SAS Viya Copilot.&amp;nbsp; But if you install VS code, and the SAS Extension for VS Code (free, developed by SAS),&amp;nbsp; and Github Copilot, you can connect to tons of LLMs, and ask them to generate code,&amp;nbsp; clean code, even execute code.&amp;nbsp; You get exactly what you want: a persistent chat pane along side your code, that can connect to any LLM.&amp;nbsp; &amp;nbsp;It's definitely worth trying now.&amp;nbsp; VS code can connect to a SAS 9 server or even local PC SAS.&amp;nbsp; I'm sure SAS Viya Copilot is terrific, because it was trained by SAS on SAS.&amp;nbsp; But I'm shocked at how good general LLMs have become at SAS coding.&amp;nbsp; It's day and night vs playing with it a year ago.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;p.s. I don't think %Window and %Display are actually macros, but maybe I'm wrong.&lt;/P&gt;</description>
      <pubDate>Fri, 26 Jun 2026 18:36:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Product-Suggestions/Native-conversational-LLM-chat-interface-for-SAS-9-4-Foundation/idc-p/990153#M808</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-06-26T18:36:56Z</dc:date>
    </item>
    <item>
      <title>Re: Add white row before a variable value</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Add-white-row-before-a-variable-value/m-p/990126#M43967</link>
      <description>&lt;P&gt;Agree, please&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/134532"&gt;@NewUsrStat&lt;/a&gt;&amp;nbsp;explain why you would want such a dataset.&amp;nbsp; It's clearly a report.&amp;nbsp; Even if you're using this dataset to validate someone else's report, I'm not sure it's a good idea.&amp;nbsp; It's hard for me to come up with a good reason to create this sort of dataset.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you're truly a New User as your screen name implies, one thing that takes time to learn is that sometimes as a programmer, your boss/statistician/analyst will ask you to do something that makes sense to how they're thinking about the problem, but doesn't make sense to implement that way in SAS.&amp;nbsp; Part of growing into a senior programmer is learning how to identify those issues, and explain/adjust.&amp;nbsp; For example,&amp;nbsp; many analysts want to talk about longitudinal data as if it's in a wide format (one record per patient ID, with score_time1 score_time2 score_time3 etc.&amp;nbsp; It's fine for them to think that way, and sometimes even write requirements that way.&amp;nbsp; They don't need to know or worry that you actually store the data in a vertical format (with variables ID, Time, Score).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I've never worked in pharma (and don't know if you do).&amp;nbsp; But sometimes I feel like pharma programmers often feel stuck programming whatever a spec asks for, instead of interpreting the spec, and suggesting changes to the spec.&lt;/P&gt;</description>
      <pubDate>Fri, 26 Jun 2026 14:37:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Add-white-row-before-a-variable-value/m-p/990126#M43967</guid>
      <dc:creator>Quentin</dc:creator>
      <dc:date>2026-06-26T14:37:10Z</dc:date>
    </item>
  </channel>
</rss>

