SAS:在宏中创建一系列新变量

时间:2014-07-15 09:29:41

标签: macros sas

我有这个变量x_yyww,过去5年的每一周。它可以取值0,1或空白。我想创建一个新的变量行,如果组合1然后出现0,则取值yyWww,例如如果x_0449=1x_0450=0。然后我需要创建这个新的变量集,称之为ovg_1 - ... ovg_n,它显示事件发生时的特定日期yyWww (04W50),其中n是给定人员发生此组合的最大次数。这是我需要帮助的地方。  当我尝试在SAS中对此进行编码时,我最终得到的所有变量ovg_1 ... ovg_n仅取最近的值。由于我的技能显然有限,我一直试图用固定的n=25 ...

来做到这一点
   %macro test(h) ;

...

   %do    i=2    %to     52;
     %let     j=%eval(&i-1);
       %if    &j    lt    10     %then    %let    j=0&j;
      %let    l=%eval(&i);
         %if    &l    lt     10    %then    %let    l=0&l;

...

  %do     n=1    %to    25

  if     x_&h&l="0"     and     x_&h&j="1"     then    do;
     ovg_&n = intnx('week.1',   mdy(1, 1, &h),   &l);     end;

  format    ovg_&k weekv5. ;

...

任何人都可以帮我解决这个问题吗? (我知道我错过了一些端点,我在原始编码中已经处理过了)

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

/* create some test data */
data test(drop=j);
retain starts_at '01JAN1990'd; *** date event collection starts;
array x_{*} event1 - event1000;  *** events;
array y_{*} date1 - date1000;  *** date of events;
do person=1 to 10;
    do j=1 to dim(x_); *** generate 1000 0s and 1s;
        x_{j}=round(ranuni(person));
        y_{j}=.;
    end;
    n=0;
    do j=1 to dim(x_)-1; *** count 0s followed by 1s;
        if x_{j}=0 and x_{j+1}=1 then do;
            n+1;
            y_{n}=starts_at+(j*7); *** calculate the date;
        end;
    end;
    output;
    format date1-date1000 weekv5.;
end;

run;