全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3975 2
2014-04-13
period.rar
大小:(565 Bytes)

 马上下载

本附件包括:

  • period.sas7bdat

我想根据不同的时间阶段(每个时间阶段都是往前rolling一年),创建不同的dummy variable, 一共创建了7个时间dummy, 但是,只有最后一个dummy有数值,其他的还是为缺失值(如图所示)。请教大家,怎么修改这个错误,或者有其他更好的办法。谢谢!

我的思路是:第一步先建7个dummy, 所有值为缺失; 第二步是根据设定的时间条件来替换那些缺失值。

*step 1: create  7 dummy varialbes with missing value;
data bbb (DROP = i);
  set period;
  array A {*} period_1 - period_7;
  do i = 1 to 7;
     A(i) = . ;
  end;
run;

*step 2: replace all missing values accoring to different time conditions;

%macro perioddummy;
%do count = 1 %to 7;

data ccc;
  set bbb;
  if (1993 + &count) <= year <= (1995 + &count) then period_&count=0;
  else if (1996 + &count) <= year <= (1998 + &count) then period_&count=1;
  else period_&count=2;
run;

%end;
%mend;
%perioddummy;



result.png
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-4-13 05:43:45
因为7 次 do loop 中的 data set 输出的ccc 会覆盖前六次do loop中创建的ccc。 所以最终结果只有当i =7, 也就是ccc 中只有period_7有值,其他的period_i 都还只是你在bbb 中设定的missing value.
1. 可以在step1 后面添加如下code: proc sql; create table ccc as select * from bbb; quit;
2. step2 用proc sql 中的 update 语句 populate ccc table:
%macro perioddummy;
proc sql; %do count = 1 %to 7; update ccc set period_&count = case
  when (1993 + &count) <= year <= (1995 + &count) then 0
  when (1996 + &count) <= year <= (1998 + &count) then 1
  else period_&count=2 end; %end; quit;
%mend;
%perioddummy;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-4-20 07:31:49
frankzhao0829 发表于 2014-4-13 05:43
因为7 次 do loop 中的 data set 输出的ccc 会覆盖前六次do loop中创建的ccc。 所以最终结果只有当i =7, 也 ...
非常感谢你的帮忙 我好好消化消化。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群