【问题标题】:How to rename variables dynamically in sas?如何在sas中动态重命名变量?
【发布时间】:2013-07-16 03:14:12
【问题描述】:

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

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

等等。

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

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

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

【问题讨论】:

  • 我理解了所有单词,但将它们放在一起没有意义。发布您的数据的proc print 以及您想要的输出。
  • 你确定你的意思是变量而不是变量的内容?因为不尊重 V7 变量名限制肯定不是一个好主意。
  • 好吧,我不想重命名变量的内容。只是变量的名称
  • @user1946152:你为什么需要这样?我无法想象这是处理事情的最佳方式的任何用例。我怀疑您想做某种类型或报告,在这种情况下,最好有一些更正统的数据集并在报告生成期间发挥作用。您能否在您的问题中扩展一下您的问题。 (通过编辑?您对答案的编辑比对答案的评论具有更大的灵活性。)

标签: sas


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    只是为了好玩,假设您无论如何都想这样做——最安全的做法是为您的输出创建数据集的副本...

    此代码假定您的变量名称命名为 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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 2019-12-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多