<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Macro to set variable length not working in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Macro-to-set-variable-length-not-working/m-p/875261#M345833</link>
    <description>&lt;P&gt;I would suggest the following revised code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let sas_vnames = v1 v2 v3; 
%let sas_vlngth = $10.^$30.^$10.;
 
/*RENAME EXCEL VARS TO SAS VAR NAMES*/
data sasnames_&amp;amp;i ;
/*BUILD LENGTH STATEMENTS*/
%macro put_lngth;
%let count=%sysfunc(countw(&amp;amp;sas_vnames,%str( )));
%put &amp;amp;count;
%do p=1 %to &amp;amp;count;

%let sas_var = %scan(&amp;amp;sas_vnames., &amp;amp;p.,%str( ));
%let sas_len = %scan(&amp;amp;sas_vlngth., &amp;amp;p., %str(^));
 
length &amp;amp;sas_var. &amp;amp;sas_len.; 

%end;
 
%mend put_lngth;
%put_lngth;
 
set imported_file_&amp;amp;letter._&amp;amp;i.;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 11 May 2023 15:43:14 GMT</pubDate>
    <dc:creator>Kathryn_SAS</dc:creator>
    <dc:date>2023-05-11T15:43:14Z</dc:date>
    <item>
      <title>Macro to set variable length not working</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-to-set-variable-length-not-working/m-p/875256#M345828</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&lt;BR /&gt;I have a variable list:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%let sas_vnames = v1 v2 v3...etc.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And a corresponding var length list:&lt;/P&gt;
&lt;P&gt;%let sas_vlngth = $10.^$30.$10.^etc.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I used ^ as an arbitrary delimiter.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This is the macro code to set the length:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV&gt;&lt;SPAN&gt; /*RENAME EXCEL VARS TO SAS VAR NAMES*/&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; data sasnames_&amp;amp;i ;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; /*BUILD LENGTH STATEMENTS*/&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp;%macro put_lngth;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; %let p = 1;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; %do %while (%scan(&amp;amp;sas_vnames., &amp;amp;p.)&amp;gt;' ');&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; %let sas_var = %scan(&amp;amp;sas_vnames., &amp;amp;p.);&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; %let sas_vlngth = %scan(&amp;amp;sas_vlngth., &amp;amp;p., ^);&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; length &amp;amp;sas_var. &amp;amp;sas_vlngth.;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; %let p = %eval(&amp;amp;p+1);&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; %end;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp;%mend put_lngth;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; &amp;nbsp; &amp;nbsp; %put_lngth;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt; set imported_file_&amp;amp;letter._&amp;amp;i.;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;From what I can tell, it's cycling through the var name list correctly but not the var length list.&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;For a given run, var length will either be blank or have a value that is not the correct value.&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Any help is much appreciated.&amp;nbsp;&lt;/DIV&gt;</description>
      <pubDate>Thu, 11 May 2023 15:35:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-to-set-variable-length-not-working/m-p/875256#M345828</guid>
      <dc:creator>Walternate</dc:creator>
      <dc:date>2023-05-11T15:35:08Z</dc:date>
    </item>
    <item>
      <title>Re: Macro to set variable length not working</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-to-set-variable-length-not-working/m-p/875259#M345831</link>
      <description>&lt;P&gt;SAS can count for you.&lt;/P&gt;
&lt;P&gt;So if you have these three variables:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let sas_vnames = v1 v2 v3; 
%let sas_vlngth = $10.^$30.^$10.;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;You can use code like:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;length
%do index=1 to %sysfunc(countw(&amp;amp;sas_vlngth,^));
  %scan(&amp;amp;sas_vnames,&amp;amp;index,%str( )) %scan(&amp;amp;sas_vlngth,&amp;amp;index,^)
%end;
;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;To generate the statement:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;length v1 $10. v2 $30. v3 $10.;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 11 May 2023 15:41:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-to-set-variable-length-not-working/m-p/875259#M345831</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2023-05-11T15:41:53Z</dc:date>
    </item>
    <item>
      <title>Re: Macro to set variable length not working</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-to-set-variable-length-not-working/m-p/875261#M345833</link>
      <description>&lt;P&gt;I would suggest the following revised code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let sas_vnames = v1 v2 v3; 
%let sas_vlngth = $10.^$30.^$10.;
 
/*RENAME EXCEL VARS TO SAS VAR NAMES*/
data sasnames_&amp;amp;i ;
/*BUILD LENGTH STATEMENTS*/
%macro put_lngth;
%let count=%sysfunc(countw(&amp;amp;sas_vnames,%str( )));
%put &amp;amp;count;
%do p=1 %to &amp;amp;count;

%let sas_var = %scan(&amp;amp;sas_vnames., &amp;amp;p.,%str( ));
%let sas_len = %scan(&amp;amp;sas_vlngth., &amp;amp;p., %str(^));
 
length &amp;amp;sas_var. &amp;amp;sas_len.; 

%end;
 
%mend put_lngth;
%put_lngth;
 
set imported_file_&amp;amp;letter._&amp;amp;i.;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 11 May 2023 15:43:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-to-set-variable-length-not-working/m-p/875261#M345833</guid>
      <dc:creator>Kathryn_SAS</dc:creator>
      <dc:date>2023-05-11T15:43:14Z</dc:date>
    </item>
  </channel>
</rss>

