如何在 Sas 中有条件移动计数器列

问题描述 投票:0回答:1

我在将 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;
sas counter
1个回答
0
投票

您的示例有点令人困惑,因为您显示的数据与您显示的代码不符。如果您的目标是 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;
© www.soinside.com 2019 - 2024. All rights reserved.