Date 每个用户的SAS返回日期“编号/订单”
我正在为许多用户运行以下查询,并且Date 每个用户的SAS返回日期“编号/订单”,date,numbers,sas,Date,Numbers,Sas,我正在为许多用户运行以下查询,并且 proc SQL; select username, (select min(sub.date) from sample sub where sub.username = outer.username) Format=worddatx20. as firstDate, date Format=worddatx20. AS betdate, monotonic() as numberOfDaysActive from sample
proc SQL;
select
username,
(select min(sub.date) from sample sub where sub.username = outer.username) Format=worddatx20. as firstDate,
date Format=worddatx20. AS betdate,
monotonic() as numberOfDaysActive
from sample as outer;
quit;
Monotonic没有为numberOfDaysActivity提供正确的值,因为它只是从返回的行的顶部开始计数,而不管用户是谁。对于每个用户,我需要知道用户在数据库中的第一天是什么时候,以及用户出现的每一天的天数
样本数据如下:
INPUT username $ amount date5 : ddmmyy8.;
DATALINES;
player1 90 12/11/08
player1 100 04/11/08
player2 120 07/11/08
player1 50 05/11/08
player1 30 05/11/08
player1 20 05/11/08
player2 10 09/11/08
player2 35 15/11/08
PROC PRINT; RUN;
“numberOfDaysActive”字段需要的内容如下:
player1 90 12/11/08 3
player1 100 04/11/08 1
player2 120 07/11/08 1
player1 50 05/11/08 2
player1 30 05/11/08 2
player1 20 05/11/08 2
player2 10 09/11/08 2
player2 35 15/11/08 3
提前感谢。使用SAS的SQL无法做到这一点;SAS目前不支持窗口功能。下面是一个解决方案,它涉及到对数据集进行排序,并根据我认为您需要的方式计算NumberOfDays活动变量:
data have;
input username $ amount date5 : ddmmyy8.;
format date5 ddmmyy8.;
row_id + 1;
datalines;
player1 90 12/11/08
player1 100 04/11/08
player2 120 07/11/08
player1 50 05/11/08
player1 30 05/11/08
player1 20 05/11/08
player2 10 09/11/08
player2 35 15/11/08
run;
proc sort data=have;
by username date5;
run;
data want;
set have;
by username date5;
retain numberOfDaysActive;
if first.username then numberOfDaysActive = 0;
if first.date5 then numberOfDaysActive + 1;
run;
proc sort data=want;
by row_id;
run;
注意:我添加了一个变量row_id,用于保留数据的原始顺序。目前还不清楚是否需要,但只是以防万一。另外,我的结果与您指定的不完全匹配:最后两行的player2的计算值为2和3。如果他们真的应该有指定的值1,我不知道是怎么做到的。你有每天的记录吗?还是有些用户跳过几天?您是否有可能添加一些示例数据和示例所需结果?请对OP进行编辑,而不是评论。在DDMMYY6前面加一个冒号。请再次编辑您的问题,根据您提供的示例数据,添加一个您希望看到的示例。如果你想做我认为你想做的事情,在数据步骤中比在SQL中更容易。这可以在纯SQL中完成,如下所示:选择用户名,选择mindate超过partition by username作为firstDate,选择date,行数超过partition by username按日期排序作为日期顺序从数据作为外部;但是SAS没有“分区”或“结束”功能。这很好,谢谢。我不需要原来的顺序,你对player2的最后两排是正确的!但是,如果日期包含时间戳怎么办?这会不会是“if first.date5然后numberOfDaysActive+1;”即使只是同一天的另一个观察结果,也将增加为新的一天?我如何添加另一个变量来指示该天是否对客户有利,即,将每天的金额值相加,并将其作为NumberOfDaysActivity旁边的指标变量?@user2146441请提出新问题,不要提及此问题一使用我在这里的回答作为如何提问SAS问题的模型:提供一个示例数据集,并显示您想要的结果。清晰的问题得到好的答案。