我有一个 sas 数据集。在其中我有一些遵循模式的变量
-W 51 Sales
-W 52 Sales
-W 53 Sales
等等。
现在我想动态重命名所有这些变量,以便W 51被该周的开始日期替换,新名称变为 - 2013 年 5 月 2 日销售?
我想重命名它们的原因是我有一年中所有 53 周的销售数据,如果我有一周的开始日期而不是 W(week_no) 销售作为变量的名称
我有什么办法可以在 sas 中做到这一点?
我有一个 sas 数据集。在其中我有一些遵循模式的变量
-W 51 Sales
-W 52 Sales
-W 53 Sales
等等。
现在我想动态重命名所有这些变量,以便W 51被该周的开始日期替换,新名称变为 - 2013 年 5 月 2 日销售?
我想重命名它们的原因是我有一年中所有 53 周的销售数据,如果我有一周的开始日期而不是 W(week_no) 销售作为变量的名称
我有什么办法可以在 sas 中做到这一点?
你真的不想重命名你的变量。你可能认为你这样做,但它最终只会咬你。
你可以做的是给他们描述性的标签。这可以通过proc datasets
.
proc datasets library=<lib>;
modify <dataset>;
label <variable> '5/2/2013 sales';
run;
只是为了好玩,假设您无论如何都想这样做——最安全的做法是为您的输出创建数据集的副本......
此代码假定您的变量名称命名为 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);
我现在没有时间测试这个,所以如果我在某个地方搞砸了,有人告诉我。这至少应该让你继续前进。或者您可以发送给我或发布一些代码来读取一个小的示例数据集(显然,如果这是可能的,而不必共享一些专有信息。您可能需要对其进行一些通用化),我将对其进行调试。