2017-06-03 114 views
0

我有一个数据集要求我在第一次找到注册的在线购物者时购买了某件商品,并为该购买申请了5%的折扣。查找变量的第一个实例

该数据集有28列,但为了这个问题的目的,我将它浓缩到只有我认为是相关的。

我需要创建一个新列,告诉我第一次有人购买东西。我们可以假设在同一天进行的采购是相同的采购,但属于不同的项目。

Obs  ID Trans_Date Order_Number Value  Status 
---------------------------------------------------------------- 
1874 866 30/07/2016 191   $4,217.90 Registered 
1875 866 30/07/2016 191   $4,217.90 Registered 
1876 866 31/07/2016 192   $2,422.75 Registered 
1877 866 31/07/2016 192   $2,422.75 Registered 
1878 .  31/07/2016 193   $4,162.66 Unregistered 
1879 .  31/07/2016 193   $4,162.66 Unregistered 
1880 344 31/07/2016 194   $4,405.51 Registered 
1881 344 31/07/2016 194   $4,405.51 Registered 
1882 .  31/07/2016 195   $2,114.76 Unregistered 
1883 .  31/07/2016 195   $2,114.76 Unregistered 
1884 250 31/07/2016 196   $3,310.72 Registered 
1885 250 31/07/2016 196   $3,310.72 Registered 
1886 .  31/07/2016 197   $4,633.48 Unregistered 
1887 .  31/07/2016 197   $4,633.48 Unregistered 
1888 .  31/07/2016 197   $4,633.48 Unregistered 
1889 .  31/07/2016 197   $4,633.48 Unregistered 
1890 .  31/07/2016 198   $6,224.43 Unregistered 
1891 .  31/07/2016 198   $6,224.43 Unregistered 
1892 .  31/07/2016 198   $6,224.43 Unregistered 
1893 .  31/07/2016 198   $6,224.43 Unregistered 
+0

你想**排名**你的记录日期,时刻保持最佳排名(第一次约会)并加起来的购买价值。我不知道SAS。使用标准SQL,您只需使用“RANK OVER”。也许这给你一个方向寻找什么。 –

+1

请澄清你的问题。我没有看到关于折扣百分比的样本数据。样本数据的期望输出是什么?你试过了什么代码? DATA步骤工具的一些常规提示:PROC SORT; BY小组处理;保留。 – Quentin

+0

我假设身份证没有期限,这意味着它会继续?看看SAS的BY组。关于BY组如何工作的文档有一整章。 – Reeza

回答

0

这里是我的 '第一' 的数据集:

'obs' , 'id' , 'trans_date' , 'order_number' , 'value'  , 'status' 
1874 , 866 , 30/07/2016 , 191   , 4217.90 , Registered 
1875 , 866 , 30/07/2016 , 191   , 4217.90 , Registered 
1876 , 866 , 31/07/2016 , 192   , 2422.75 , Registered 
1877 , 866 , 31/07/2016 , 192   , 2422.75 , Registered 
1878 , 344 , 30/07/2016 , 193   , 4162.66 , Unregistered 
1879 , 344 , 30/07/2016 , 193   , 4162.66 , Unregistered 
1880 , 344 , 31/07/2016 , 194   , 4405.51 , Registered 
1881 , 344 , 31/07/2016 , 194   , 4405.51 , Registered 
1882 , 250 , 30/07/2016 , 195   , 2114.76 , Unregistered 
1883 , 250 , 30/07/2016 , 195   , 2114.76 , Unregistered 
1884 , 250 , 31/07/2016 , 196   , 3310.72 , Registered 
1885 , 250 , 31/07/2016 , 196   , 3310.72 , Registered 
1886 , 275 , 30/07/2016 , 197   , 4633.48 , Unregistered 
1887 , 275 , 30/07/2016 , 197   , 4633.48 , Unregistered 
1888 , 275 , 30/07/2016 , 197   , 4633.48 , Unregistered 
1889 , 275 , 30/07/2016 , 197   , 4633.48 , Unregistered 
1890 , 275 , 31/07/2016 , 198   , 6224.43 , Unregistered 
1891 , 275 , 31/07/2016 , 198   , 6224.43 , Unregistered 
1892 , 275 , 31/07/2016 , 198   , 6224.43 , Unregistered 
1893 , 275 , 31/07/2016 , 198   , 6224.43 , Unregistered 

和这里的一些PROC SQL:

proc sql noprint; 
create table temp as 
select *,min(trans_date) format=date9. as first 
from first 
group by id 
order by order_number; 

create table final as 
select obs,id,trans_date,order_number,value,status, 
    case when first = trans_date then 'FIRST' 
     else 'NOT FIRST' 
    end as flag 
from temp; 
quit; 
相关问题