1

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

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

等等。

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

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

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

4

2 回答 2

4

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

可以做的是给他们描述性的标签。这可以通过proc datasets.

proc datasets library=<lib>;
    modify <dataset>;
    label <variable> '5/2/2013 sales';
run;
于 2013-07-13T14:09:40.090 回答
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);

我现在没有时间测试这个,所以如果我在某个地方搞砸了,有人告诉我。这至少应该让你继续前进。或者您可以发送给我或发布一些代码来读取一个小的示例数据集(显然,如果这是可能的,而不必共享一些专有信息。您可能需要对其进行一些通用化),我将对其进行调试。

于 2013-07-15T19:04:34.950 回答