<?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: Complex SQL rename query in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797523#M313544</link>
    <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/292735"&gt;@Swapnil_21&lt;/a&gt;&amp;nbsp;&lt;BR /&gt;Once can find the columns of any data set using SAS dictionaty table or proc contents.&lt;BR /&gt;I am giveng and example below using sashelp.class.&amp;nbsp;&lt;BR /&gt;Here libname is the library&amp;nbsp; (SAS HELP) where the data set memname (CLASS in the example )resides.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
select  name from dictionary.columns
where libname="SASHELP" and memname="CLASS" and memtype="DATA";
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Thus once you have the column names, you can decide what columns to rename ans shown earlier.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
    <pubDate>Mon, 21 Feb 2022 02:28:42 GMT</pubDate>
    <dc:creator>Sajid01</dc:creator>
    <dc:date>2022-02-21T02:28:42Z</dc:date>
    <item>
      <title>Complex SQL rename query</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797476#M301300</link>
      <description>&lt;P&gt;I have dataset with 200 columns. Out of that I need to replace values in original columns with modified columns which always start with&amp;nbsp; _M_.&lt;/P&gt;
&lt;P&gt;E.g. out of 200 columns in datasets, Account_ID,&amp;nbsp; ACCOUNT_CLASSIFICATION_CODE&amp;nbsp;,BS_CENTRE_ID has corresponding columns as _M_ACCOUNT_ID,_M_ACCOUNT_CLASSIFICATION_CODE,_M_BS_CENTRE_ID. However, there could be any number of columns which has such corresponding _M_ pair&lt;/P&gt;
&lt;P&gt;So we need to identify how many columns have such pairs and then replace values in original columns with modified columns.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below is the sample Have dataset&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="1232"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;MONTH_KEY&lt;/TD&gt;
&lt;TD width="73"&gt;PERIOD_ID&lt;/TD&gt;
&lt;TD width="140"&gt;ACCOUNT_ID&lt;/TD&gt;
&lt;TD width="221"&gt;ACCOUNT_CLASSIFICATION_CODE&lt;/TD&gt;
&lt;TD width="96"&gt;BILLING_CODE&lt;/TD&gt;
&lt;TD width="108"&gt;PRODUCT_CODE&lt;/TD&gt;
&lt;TD width="97"&gt;BS_CENTRE_ID&lt;/TD&gt;
&lt;TD width="108"&gt;_M_ACCOUNT_ID&lt;/TD&gt;
&lt;TD width="241"&gt;_M_ACCOUNT_CLASSIFICATION_CODE&lt;/TD&gt;
&lt;TD width="64"&gt;_M_BS_CENTRE_ID&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;CC 5163104001923574&lt;/TD&gt;
&lt;TD&gt;65031&lt;/TD&gt;
&lt;TD&gt;871&lt;/TD&gt;
&lt;TD&gt;13334&lt;/TD&gt;
&lt;TD&gt;161730&lt;/TD&gt;
&lt;TD&gt;MAJ12345&lt;/TD&gt;
&lt;TD&gt;11433&lt;/TD&gt;
&lt;TD&gt;113&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;CC 5163190010421759&lt;/TD&gt;
&lt;TD&gt;66031&lt;/TD&gt;
&lt;TD&gt;V05&lt;/TD&gt;
&lt;TD&gt;13255&lt;/TD&gt;
&lt;TD&gt;161730&lt;/TD&gt;
&lt;TD&gt;MAJ87564&lt;/TD&gt;
&lt;TD&gt;67845&lt;/TD&gt;
&lt;TD&gt;345&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;CC 5163230005429159&lt;/TD&gt;
&lt;TD&gt;28051&lt;/TD&gt;
&lt;TD&gt;G02&lt;/TD&gt;
&lt;TD&gt;13253&lt;/TD&gt;
&lt;TD&gt;161730&lt;/TD&gt;
&lt;TD&gt;JAK89167&lt;/TD&gt;
&lt;TD&gt;98365&lt;/TD&gt;
&lt;TD&gt;765&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;CC 5163202036863805&lt;/TD&gt;
&lt;TD&gt;43151&lt;/TD&gt;
&lt;TD&gt;V05&lt;/TD&gt;
&lt;TD&gt;13249&lt;/TD&gt;
&lt;TD&gt;161730&lt;/TD&gt;
&lt;TD&gt;PPT11765&lt;/TD&gt;
&lt;TD&gt;41897&lt;/TD&gt;
&lt;TD&gt;897&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;CC 4715726286102320&lt;/TD&gt;
&lt;TD&gt;12011&lt;/TD&gt;
&lt;TD&gt;105&lt;/TD&gt;
&lt;TD&gt;13124&lt;/TD&gt;
&lt;TD&gt;161730&lt;/TD&gt;
&lt;TD&gt;RAM90145&lt;/TD&gt;
&lt;TD&gt;34950&lt;/TD&gt;
&lt;TD&gt;950&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;CC 4564729003710930&lt;/TD&gt;
&lt;TD&gt;95021&lt;/TD&gt;
&lt;TD&gt;S02&lt;/TD&gt;
&lt;TD&gt;13126&lt;/TD&gt;
&lt;TD&gt;161730&lt;/TD&gt;
&lt;TD&gt;TPT66387&lt;/TD&gt;
&lt;TD&gt;12854&lt;/TD&gt;
&lt;TD&gt;684&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And below is what is expected in Want dataset&lt;/P&gt;
&lt;TABLE width="819"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="84"&gt;MONTH_KEY&lt;/TD&gt;
&lt;TD width="73"&gt;PERIOD_ID&lt;/TD&gt;
&lt;TD width="140"&gt;ACCOUNT_ID&lt;/TD&gt;
&lt;TD width="221"&gt;ACCOUNT_CLASSIFICATION_CODE&lt;/TD&gt;
&lt;TD width="96"&gt;BILLING_CODE&lt;/TD&gt;
&lt;TD width="108"&gt;PRODUCT_CODE&lt;/TD&gt;
&lt;TD width="97"&gt;BS_CENTRE_ID&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;MAJ12345&lt;/TD&gt;
&lt;TD&gt;11433&lt;/TD&gt;
&lt;TD&gt;871&lt;/TD&gt;
&lt;TD&gt;13334&lt;/TD&gt;
&lt;TD&gt;113&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;MAJ87564&lt;/TD&gt;
&lt;TD&gt;67845&lt;/TD&gt;
&lt;TD&gt;V05&lt;/TD&gt;
&lt;TD&gt;13255&lt;/TD&gt;
&lt;TD&gt;345&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;JAK89167&lt;/TD&gt;
&lt;TD&gt;98365&lt;/TD&gt;
&lt;TD&gt;G02&lt;/TD&gt;
&lt;TD&gt;13253&lt;/TD&gt;
&lt;TD&gt;765&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;PPT11765&lt;/TD&gt;
&lt;TD&gt;41897&lt;/TD&gt;
&lt;TD&gt;V05&lt;/TD&gt;
&lt;TD&gt;13249&lt;/TD&gt;
&lt;TD&gt;897&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;RAM90145&lt;/TD&gt;
&lt;TD&gt;34950&lt;/TD&gt;
&lt;TD&gt;105&lt;/TD&gt;
&lt;TD&gt;13124&lt;/TD&gt;
&lt;TD&gt;950&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;202109&lt;/TD&gt;
&lt;TD&gt;20210930&lt;/TD&gt;
&lt;TD&gt;TPT66387&lt;/TD&gt;
&lt;TD&gt;12854&lt;/TD&gt;
&lt;TD&gt;S02&lt;/TD&gt;
&lt;TD&gt;13126&lt;/TD&gt;
&lt;TD&gt;684&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have tried using coalesce and also using rename , but somehow I am not able to find correct solution.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Any help is really appreciated&lt;/P&gt;</description>
      <pubDate>Sun, 20 Feb 2022 16:20:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797476#M301300</guid>
      <dc:creator>Swapnil_21</dc:creator>
      <dc:date>2022-02-20T16:20:32Z</dc:date>
    </item>
    <item>
      <title>Re: Complex SQL rename query</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797486#M313518</link>
      <description>&lt;P&gt;Hello&lt;BR /&gt;In the first para of your question para of your question you are requesting assistance in renaming columns.&lt;BR /&gt;Then you want assistance if finding columns to be renamed.&lt;BR /&gt;Can you please be more&amp;nbsp; clear?&lt;BR /&gt;Renaming columns is a simple process in SAS if that is what you are looking for. I have given two examples below.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table class1 as
select Name as _M_Name,  Sex as _M_Sex ,  Age as _M_Age
 from sashelp.class;
quit;
data class2;
set sashelp.class(Rename=(Name=_M_Name Sex=_M_  Age=_M_Age) );
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 20 Feb 2022 18:48:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797486#M313518</guid>
      <dc:creator>Sajid01</dc:creator>
      <dc:date>2022-02-20T18:48:38Z</dc:date>
    </item>
    <item>
      <title>Re: Complex SQL rename query</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797513#M313539</link>
      <description>So precisely my question is&lt;BR /&gt;1. Out of 200 column how do I know which columns start with _M_ and then remaining portion matches with actual column&lt;BR /&gt;2. When matches, rename them with original column.&lt;BR /&gt;&lt;BR /&gt;Sample datasets provided earlier</description>
      <pubDate>Mon, 21 Feb 2022 01:07:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797513#M313539</guid>
      <dc:creator>Swapnil_21</dc:creator>
      <dc:date>2022-02-21T01:07:33Z</dc:date>
    </item>
    <item>
      <title>Re: Complex SQL rename query</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797523#M313544</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/292735"&gt;@Swapnil_21&lt;/a&gt;&amp;nbsp;&lt;BR /&gt;Once can find the columns of any data set using SAS dictionaty table or proc contents.&lt;BR /&gt;I am giveng and example below using sashelp.class.&amp;nbsp;&lt;BR /&gt;Here libname is the library&amp;nbsp; (SAS HELP) where the data set memname (CLASS in the example )resides.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
select  name from dictionary.columns
where libname="SASHELP" and memname="CLASS" and memtype="DATA";
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Thus once you have the column names, you can decide what columns to rename ans shown earlier.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 21 Feb 2022 02:28:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797523#M313544</guid>
      <dc:creator>Sajid01</dc:creator>
      <dc:date>2022-02-21T02:28:42Z</dc:date>
    </item>
    <item>
      <title>Re: Complex SQL rename query</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797565#M313561</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/292735"&gt;@Swapnil_21&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;So precisely my question is&lt;BR /&gt;1. Out of 200 column how do I know which columns start with _M_ and then remaining portion matches with actual column&lt;BR /&gt;2. When matches, rename them with original column.&lt;BR /&gt;&lt;BR /&gt;Sample datasets provided earlier&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Your second step won't work without dropping the original variable first.&lt;/P&gt;
&lt;P&gt;Before starting to solve such task, i recommend writing the code for one m-Variable, skipping any existence checks. The most obvious, but also not working solution is:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc datasets nolist;
  modify your_dataset;
    drop old_var;
    rename _m_old_var = old_var;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Unfortunately proc datasets doesn't support the drop statement. Sad.&lt;/P&gt;
&lt;P&gt;Dropping variable is possible using proc sql alter table, but the alter statement can't rename variables. Sad²&lt;/P&gt;
&lt;P&gt;So you need both: proc sql to drop the unwanted variables and proc datasets to rename the m-variables. If the dataset is really small, you could use a data null step with call execute generating a proc&amp;nbsp; sql to creating a new dataset.&lt;/P&gt;
&lt;P&gt;Will return later, as soon as i had the time to create something working.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 21 Feb 2022 09:31:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797565#M313561</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2022-02-21T09:31:46Z</dc:date>
    </item>
    <item>
      <title>Re: Complex SQL rename query</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797567#M313563</link>
      <description>&lt;P&gt;Unfortunately you didn't provide data in usable form, so i used a modified version sashelp.class. The subsequent steps extract the information of interest.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data work.class;
   set sashelp.class;
   
   length _m_Age _m_Weight 8;
   
   _m_Age = Age + 10;
   _m_Weight = round(Weight * 1.5, 0.01);
run;

data work.Variables;
   set sashelp.vcolumn(where=(libname = 'WORK' and MemName = 'CLASS' and  not ('_m_' =: Name)));
      
   bob = _n_;
   
   keep Name bob;
run;

data work.M_Variables;
   set sashelp.vcolumn(where=(libname = 'WORK' and MemName = 'CLASS' and '_m_' =: Name));
   
   length mVar $ 32;
   
   mVar = Name;
   Name = substr(Name, 4);
   
   keep Name mVar;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The first solution will not change your dataset, but will have a higher runtime, if the dataset is large. &lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
   set work.Variables end= jobDone;
   
   if _n_ = 1 then do;
      if 0 then set work.M_Variables;
      
      declare hash h(dataset: 'work.M_Variables');
      h.defineKey('Name');
      h.defineData('mVar');
      h.defineDone();
      
      call execute('proc sql noprint; create table work.fixed as select');
   end;
   
   mVar = ' ';
   
   if _n_ &amp;gt; 1 then do;
      call execute(',');
   end;
   
   if h.find() = 0 then do;
      call execute(catx(' ', mVar, 'as', Name));
   end;
   else do;
      call execute(Name);
   end;
   
   if jobDone then do;
      call execute(' from work.class; quit;');
   end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And here's another solution modifying your dataset, because there is no undo, you should be 100% sure, that you understand what happens.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
   set work.Variables end= jobDone;
   
   if _n_ = 1 then do;
      if 0 then set work.M_Variables;
      
      declare hash h(dataset: 'work.M_Variables');
      h.defineKey('Name');
      h.defineData('mVar');
      h.defineDone();
   end;
   
   length 
      dropList $ 6600 /* 200 Variables, max length 32 chars, +1 to hold the separator */
      renameList $ 14000  /* 66 chars for each pair oldname/newname incl. separators */
   ;
   
   retain dropList renameList;
   
   if h.find() = 0 then do;
      dropList = catx(',', dropList, Name);
      renameList = catx(' ', renameList, cats(mVar, '=', Name));
   end;

   if jobDone and not missing(dropList) then do;
      call execute(catx(' ', 'proc sql noprint; alter table work.Class drop', dropList, '; quit;'));
      call execute(catx(' ', 'proc datasets nolist library=work; modify Class; rename', renameList, ';quit;'));
   end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 21 Feb 2022 10:00:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Complex-SQL-rename-query/m-p/797567#M313563</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2022-02-21T10:00:10Z</dc:date>
    </item>
  </channel>
</rss>

