<?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 More efficient way to truncate many variables at once in New SAS User</title>
    <link>https://communities.sas.com/t5/New-SAS-User/More-efficient-way-to-truncate-many-variables-at-once/m-p/521202#M4165</link>
    <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like to create a more efficient code for trying to truncate dozens of variables in a list. So, for instance I have this:&lt;/P&gt;&lt;TABLE cellspacing="0" cellpadding="0" border="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;DX1&lt;/TD&gt;&lt;TD&gt;DX2&lt;/TD&gt;&lt;TD&gt;DX3&lt;/TD&gt;&lt;TD&gt;DX4&lt;/TD&gt;&lt;TD&gt;DX5&lt;/TD&gt;&lt;TD&gt;DX6&lt;/TD&gt;&lt;TD&gt;DX7&lt;/TD&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;F15.151&lt;/TD&gt;&lt;TD&gt;S32.602A&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S72.401B&lt;/TD&gt;&lt;TD&gt;T79.4XXA&lt;/TD&gt;&lt;TD&gt;R78.81&lt;/TD&gt;&lt;TD&gt;G82.20&lt;/TD&gt;&lt;TD&gt;S22.39XA&lt;/TD&gt;&lt;TD&gt;J96.90&lt;/TD&gt;&lt;TD&gt;M79.5&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;W34.00XA&lt;/TD&gt;&lt;TD&gt;R57.0&lt;/TD&gt;&lt;TD&gt;N28.9&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S81.801A&lt;/TD&gt;&lt;TD&gt;K21.9&lt;/TD&gt;&lt;TD&gt;E87.6&lt;/TD&gt;&lt;TD&gt;S71.132A&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And would like just the first three characters from each string: F15, S32, S72, T79, etc.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there a way to do this without individually creating new variables for each of the dx vars using the SUBSTR function? In actuality I have 79 of these Dx variables so that would be a time consuming process, and I imagine there's a better way.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
    <pubDate>Thu, 13 Dec 2018 17:13:08 GMT</pubDate>
    <dc:creator>Krysia24</dc:creator>
    <dc:date>2018-12-13T17:13:08Z</dc:date>
    <item>
      <title>More efficient way to truncate many variables at once</title>
      <link>https://communities.sas.com/t5/New-SAS-User/More-efficient-way-to-truncate-many-variables-at-once/m-p/521202#M4165</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would like to create a more efficient code for trying to truncate dozens of variables in a list. So, for instance I have this:&lt;/P&gt;&lt;TABLE cellspacing="0" cellpadding="0" border="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;DX1&lt;/TD&gt;&lt;TD&gt;DX2&lt;/TD&gt;&lt;TD&gt;DX3&lt;/TD&gt;&lt;TD&gt;DX4&lt;/TD&gt;&lt;TD&gt;DX5&lt;/TD&gt;&lt;TD&gt;DX6&lt;/TD&gt;&lt;TD&gt;DX7&lt;/TD&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;F15.151&lt;/TD&gt;&lt;TD&gt;S32.602A&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S72.401B&lt;/TD&gt;&lt;TD&gt;T79.4XXA&lt;/TD&gt;&lt;TD&gt;R78.81&lt;/TD&gt;&lt;TD&gt;G82.20&lt;/TD&gt;&lt;TD&gt;S22.39XA&lt;/TD&gt;&lt;TD&gt;J96.90&lt;/TD&gt;&lt;TD&gt;M79.5&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;W34.00XA&lt;/TD&gt;&lt;TD&gt;R57.0&lt;/TD&gt;&lt;TD&gt;N28.9&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;S81.801A&lt;/TD&gt;&lt;TD&gt;K21.9&lt;/TD&gt;&lt;TD&gt;E87.6&lt;/TD&gt;&lt;TD&gt;S71.132A&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;And would like just the first three characters from each string: F15, S32, S72, T79, etc.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there a way to do this without individually creating new variables for each of the dx vars using the SUBSTR function? In actuality I have 79 of these Dx variables so that would be a time consuming process, and I imagine there's a better way.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Thu, 13 Dec 2018 17:13:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/More-efficient-way-to-truncate-many-variables-at-once/m-p/521202#M4165</guid>
      <dc:creator>Krysia24</dc:creator>
      <dc:date>2018-12-13T17:13:08Z</dc:date>
    </item>
    <item>
      <title>Re: More efficient way to truncate many variables at once</title>
      <link>https://communities.sas.com/t5/New-SAS-User/More-efficient-way-to-truncate-many-variables-at-once/m-p/521203#M4166</link>
      <description>&lt;P&gt;Use an array if you want to do it in place or convert. The $3. creates the new variables with only three characters so that should help.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data want;
set have;

array dx(25) dx1-dx25;
array _newdx(25) $3. new_dx1-new_dx25;

do i=1 to dim(dx);
_newdx(i) = dx(i);
end;

run;&lt;/PRE&gt;
&lt;P&gt;If this is just for appearances, you can also just apply the format $3. to all the variables.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;format dx1-dx25 $3.;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 13 Dec 2018 17:16:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/More-efficient-way-to-truncate-many-variables-at-once/m-p/521203#M4166</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-12-13T17:16:24Z</dc:date>
    </item>
    <item>
      <title>Re: More efficient way to truncate many variables at once</title>
      <link>https://communities.sas.com/t5/New-SAS-User/More-efficient-way-to-truncate-many-variables-at-once/m-p/521220#M4171</link>
      <description>&lt;P&gt;If you just want to convert the VALUES and not change the variable definitions then use an ARRAY.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want ;
  set have;
  array dx dx1-dx25;
  do i=1 to dim(dx);
    dx(i)=substr(dx(i),1,3);
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Note this is good example where the&amp;nbsp; DO OVER syntax is useful, although for some reason SAS has removed it from the documentation.&amp;nbsp; DO OVER is useful where the index value has no meaning since you do not need to use a variable for the index.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want ;
  set have;
  array dx dx1-dx25;
  do over dx;
    dx=substr(dx,1,3);
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Since the documentation is gone note that this type of implicit array reference like this will actually use the index variable associated with the array.&amp;nbsp; The default is to use _I_ as that variable.&amp;nbsp; So DO OVER is basically saying DO _I_=1 to 25.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 13 Dec 2018 17:45:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/More-efficient-way-to-truncate-many-variables-at-once/m-p/521220#M4171</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-12-13T17:45:37Z</dc:date>
    </item>
    <item>
      <title>Re: More efficient way to truncate many variables at once</title>
      <link>https://communities.sas.com/t5/New-SAS-User/More-efficient-way-to-truncate-many-variables-at-once/m-p/521222#M4172</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards truncover;
input (DX1	DX2	DX3	DX4	DX5	DX6	DX7) (:$10.);
cards;
F15.151	S32.602A	 	 	 	 	 	 
S72.401B	T79.4XXA	R78.81	G82.20	S22.39XA	J96.90	M79.5	 
W34.00XA	R57.0	N28.9	 	 	 	 	 
S81.801A	K21.9	E87.6	S71.132A	 
;


data want;
set have;
array d dx:;
do _n_=1 to dim(d);
d(_n_)=peekclong(addrlong(d(_n_)),3);
end;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 13 Dec 2018 17:53:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/More-efficient-way-to-truncate-many-variables-at-once/m-p/521222#M4172</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-12-13T17:53:12Z</dc:date>
    </item>
  </channel>
</rss>

