【发布时间】:2013-06-05 19:20:49
【问题描述】:
我正在为多个用户运行以下查询,并且
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() 没有为 numberOfDaysActive 提供正确的值,因为它只是从返回的行的顶部开始计数,而与用户无关。对于每个用户,我需要知道用户在数据库中的第一天是什么时候,以及用户在场的每一天之后的天数。
样本数据如下:
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
提前致谢。
【问题讨论】:
-
你每天都有记录吗?还是有些用户会跳过几天?您是否有机会添加一些示例数据和示例所需的结果?
-
请对 OP 进行编辑而不是评论。在 DDMMYY6 之前放置一个冒号 (:)。让它以这种格式输入。
-
请根据您提供的示例数据再次编辑您的问题,以添加您想要查看的内容的示例。如果你想做我认为你想做的事情,在数据步骤中比在 SQL 中更容易。
-
这可以在纯 SQL 中像这样完成:选择用户名,选择 min(date) over (partition by username) as firstDate, date, row_number() over (partition by username order by date) as数据中的 date_sequence 作为外部;但 SAS 没有“分区”或“过度”功能。