我有这个变量x_yyww
,过去5年的每一周。它可以取值0,1或空白。我想创建一个新的变量行,如果组合1然后出现0,则取值yyWww
,例如如果x_0449=1
和x_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. ;
...
任何人都可以帮我解决这个问题吗? (我知道我错过了一些端点,我在原始编码中已经处理过了)
答案 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;