如何在sas中动态重命名变量?

时间:2013-07-13 02:42:18

标签: sas

我有一个sas数据集。在其中我有一些遵循模式的变量

 -W 51 Sales
 -W 52 Sales
 -W 53 Sales

等等。

现在我想动态重命名所有这些变量,以便 W 51 替换为该周的开始日期,新名称变为 - 5/2/2013销售

我想重命名它们的原因是我有一年中所有53周的销售数据,如果我有一周的开始日期而不是W(week_no),我的数据集会更加容易理解销售作为变量名称

我有什么方法可以在sas中做到这一点吗?

2 个答案:

答案 0 :(得分:4)

您真的不想重命名变量。你可能认为你这样做,但它最终只会咬你。

可以做的事情是给他们描述性标签。这可以通过proc datasets完成。

proc datasets library=<lib>;
    modify <dataset>;
    label <variable> '5/2/2013 sales';
run;

答案 1 :(得分:1)

只是为了好玩,我们假设你想要这样做 - 最安全的事情就是为你的输出创建一个数据集副本......

此代码假设您的变量名称命名为w1_sales,输出名称将重命名为03JAN2013_sale或类似名称。

     data newDataSet; 
        set oldDataSet;

     %MACRO rename_vars(mdataset,year);
        data &mdataset.;
           set &mdataset.;
            %do i = 1 %to 53;
             %let weekStartDate = %sysfunc(intnx('week&i','01jan&year.'d,0));         %*returns the starting day of week(i) uses sunday as starting date.  If you want monday use 0.1 as last param;    
             %let weekstartDateFormatted =  %sysfunc(putn(&weekStartDate.,DATE.))     %*formats into ddMONyyy. substitute whatever format you want;
             rename w&i._Sale = &weekstartDateFormatted ._SALES;   
            %end;
          run;
    %MEND rename_vars;

    %rename_vars(newDataSet,2013);

我现在没有时间对此进行测试,所以如果我把它搞砸到某个地方,那么sommebody会告诉我。这应该至少让你去。或者您可以发送给我或发布一些代码来阅读一个小的样本数据集(显然,如果这是可能的,而不必共享一些专有信息。您可能需要对它进行一些泛化)与那些类似的变量,我将调试它。