我有一个sas数据集。在其中我有一些遵循模式的变量
-W 51 Sales
-W 52 Sales
-W 53 Sales
等等。
现在我想动态重命名所有这些变量,以便 W 51 替换为该周的开始日期,新名称变为 - 5/2/2013销售
我想重命名它们的原因是我有一年中所有53周的销售数据,如果我有一周的开始日期而不是W(week_no),我的数据集会更加容易理解销售作为变量名称
我有什么方法可以在sas中做到这一点吗?
答案 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会告诉我。这应该至少让你去。或者您可以发送给我或发布一些代码来阅读一个小的样本数据集(显然,如果这是可能的,而不必共享一些专有信息。您可能需要对它进行一些泛化)与那些类似的变量,我将调试它。