我在将 SAS 中的计数器列向下移动一时遇到问题,因为它不符合我的条件。
`data Distinct_Member1;
set Distinct_Member;
by Member_ID startyear;
retain Count 0;
if first.Member_ID then Count = 0;
if (Purchased_Fruit in ('Apples') and Quantity_Purchased not in ('None') and group not in
('Females')) then Count = Count + 1;
if (Purchased_Fruit not in ('Apples') OR Quantity_Purchased in ('None') OR group in
('Females')) then Count = Count + 1
run;`
这是原始计数器的代码,但现在我想将计数器向下移动 1,如下所示
会员ID | 已购买_水果 | 团体 | 数 |
---|---|---|---|
1 | 苹果 | 女 | 1 |
1 | 苹果 | 女 | 2 |
1 | 苹果 | 女 | 3 |
2 | 苹果 | 女 | 1 |
2 | 苹果 | 女 | 2 |
2 | 香蕉 | 女 | 0 |
2 | 香蕉 | 女 | 0 |
2 | 苹果 | 女 | 1 |
2 | 苹果 | 女 | 2 |
3 | 苹果 | 男 | 0 |
4 | 梨子 | 女 | 0 |
4 | 苹果 | 女 | 1 |
4 | 橙子 | 女 | 0 |
这就是我希望通过 Count_Shift Column 实现的目标
会员ID | 已购买_水果 | 团体 | 数 | 计数_移位 |
---|---|---|---|---|
1 | 苹果 | 女 | 1 | 0 |
1 | 苹果 | 女 | 2 | 1 |
1 | 苹果 | 女 | 3 | 2 |
2 | 苹果 | 女 | 1 | 0 |
2 | 苹果 | 女 | 2 | 1 |
2 | 香蕉 | 女 | 0 | 2 |
2 | 香蕉 | 女 | 0 | 0 |
2 | 苹果 | 女 | 1 | 0 |
2 | 苹果 | 女 | 2 | 1 |
3 | 苹果 | 男 | 0 | 0 |
4 | 梨子 | 女 | 0 | 0 |
4 | 苹果 | 女 | 1 | 0 |
4 | 橙子 | 女 | 0 | 1 |
我尝试了此函数和滞后函数的组合,但我似乎从未获得所需的结果。任何有关如何实现 Count_Shift 列的帮助或指导将不胜感激!谢谢你。
data Distinct_Member2;
set Distinct_Member1;
by Member_ID;
retain Count_Shift 0; if first.Member_ID then Count_Shift = 0;
else if Count >0 then Count_Shift = Count - 1;
run;
您的示例有点令人困惑,因为您显示的数据与您显示的代码不符。如果您的目标是 Count_Shift 实际上是 Member_ID 内的滞后,您可以这样做:
data Distinct_Member2;
set Distinct_Member1;
by Member_ID;
Count_Shift=lag(Count) ;
if first.Member_ID then Count_Shift=0 ;
run;