全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
662 11
2015-11-05
悬赏 888 个论坛币 已解决
最近有个问题急需解决。 现在没有电脑上没有足够RAM支持运行SAS,所以先用 R 解决。
分析数据2015.xlsx
大小:(35.3 KB)

 马上下载

  数据看上边附件。能解决多少,先写多少步骤,我们可以陆续跟进回帖,直到问题解决。时间有些紧,我还要做别的任务。 

现在设置悬赏金币888个,如果回答完整,经试验回答者的 R codes 后,如果可以运行则可以获得额外奖励,具体规则看这里 https://bbs.pinggu.org/thread-3549579-1-1.html

数据在附件里。 问题不是很难,但我最近忙Excel里的编程,所以要请教一下高手 R 的运用。 实际数据太大,所以不能在Excel 里实现运算。SQL 权限不够,不能create table 所以只能用R 来解决。

越快越好,过程越详细越好,最好要有方法说明和结果例子解析。


下边说了这么多,我想要的结果也在数据Excel里的一个tab 理想结果中。

数据里一共有11个变量。变量一到十已经标做var1, ...... ,var10。还有var_result。 另外还要创建两到三个变量并加入到原始数据中,这样方便以后检测是否能做统计回归分析,具体看下边。

var1 是个体号码,如果最后两位数是00,就是good,如果是其他数字就是bad. 记得打开后要先ctrl+A 扩展所有列里的内容。 

var2 有两种结果good或者bad,上边说了。 在编程的时候最好要用var2 来分类var1 这样就不用多定义一个变量,我在Excel里单独放出来是为了别人检查方便才设置的。 

var3 和var4 基本相等,但是var4 的某些数据要比var3的大。 

如果var3 和 var4 相等,那么var5 就是0,不是的话,要计算var5和 var4-var3 的不同。 

var6 有四个级别, level A, B, C, D。 要求是把做出的分析结果按照这四个级别分类。 

每个级别的结果单独列在一个表格里。 最后R 算出的结果还是要放到Excel里,不知道R里有没有像SAS那种 output delivery 的转换工具? 如果有请告知。

现在看到的是Var 7 和 Var 9 被合并到 Var 10 里面了。 但是要注意一点,不是所有的var7 和var9都要合并,实际数据比这个sample 要大好几万倍,所以有的Var10 在Var 6是 level D 的时候和 Var7 相等,虽然附件里的数据里没有Level D,但是这个条件还是要考虑进去。

Var8 是月份,所有数据都在一年里。

Var_Result 虽然是用来对比的标准。


具体编程要求:

1, 先按照var6 的四个级别 level 分开,把其他变量分类,这样便于把最后算出的结果按照级别单独列到Excel的表格里。

2, 每个var1 的个体号码,代表一个个体,他会在一年数个月里去过的地方消费多次,所以var3, var4, var5的值会不同。 但是Var4 是没有优惠的消费额,Var3 是在某些个体但不是全部个体在优惠后的消费额,所以Var4-Var3不总等于0。但是Var5 也是消费额(具体说明看下面的步骤 4), 但是它和 Var4 - Var3的值 不完全相等,所以要统计出哪些var5 和 var4 - var3 是不同的,哪些是相同的,用百分比就可以。

3, Var7 里的OH, ID之类的是指个体消费过的地方名的简称,Var9里的Yes 和No如果和Var7和并到 var10里就代表是否去过某个具体地方消费。

要求是一般情况下, 一个个体一年里只在一个地方消费,所以一个个体号码不会和 var7 里的 多个地方产生联系。 这个检验也要考虑进去: 如果一个个体在一年里出现在var7 里的两个或以上地方消费, 就要把这些人单独统计出来,把最后的结果按照考虑所有人列出,还有只考虑一个个体一年里只在一个地方消费的列出,前面的其他条件和要求不变。

这是合同规定,如果一个个体一年里不在指定的地方购物,就不被算作正确的结果,但这种个体应该是少数人。 如果这样的个体在实际庞大的数据库里有很多,那就说明数据错了。 所以我要把最后的结果按照所有人和一年内只是在一个地方消费的所有个体单独列出看看有什么不同。


4,这个Var_Result 是在Var6 单独列到四个级别后对比的标准。

比如说如果var1 里每个个体在一年里在var7里的每个地方消费累计额度 (说的是var5 ) 大于给出的标准Var_Result, 那就要把这个人在一年里哪个月(看var8) 消费累计额度超过标准列出来,这个可以创建一个新变量 叫 beyond_date, 每个个体都应该有个beyond_date。

然后再设置一个新变量叫 beyond_amount 把每个var1 个体在超出标准后的一年剩余时间里的var3 总数算出来。 这种情况下我只对 Var3 是在某些个体但不是全部个体在优惠后的消费额, 感兴趣。

但是如果一个个体在一年里的消费累计额度没有 超过对比的标准 Var_Result 那就把beyond_amount设置为 0,beyond_date设置成 NA。

在算步骤4 的时候注意var2 分两种也就是每个个体可以 是good也可以是bad。 如果是一个个体对应的var2 是good 很简单,这个个体号码最后两位数是00, 但如果对应的 var2  是bad 那么最后两位数是多种情况 01, 02, 03, 04,05,06。

这个会比较麻烦,但是要尽可能实现,悬赏额可以增加。 如果一个个体对应的var2 是bad, 那就要看他 在哪个bad 的情况下,在一年的哪个月份消费累计额度(var5 )超过对比的标准(var10 )。比如一个个体(一共有 5 种bad情况)但是在var2 是bad 而且其个体号码最后两位03的情况下,在 1999年 8月 (var8) 消费累计额度(var5) 超过了对比的标准 var10 那么剩下的两种情况就不用在和标准做对比了。 直接计算这个个体在超过标准后 的剩余时间里 消费累计额度(var5) 即可。


这每个个体消费情况不同,估计要用 loop 来解决。















分析数据.xlsx

大小:29.7 KB , 阅读权限: 46

 马上下载

最佳答案

封神榜! 查看完整内容

1. 先按照var6 的四个级别 level 分开 楼主是要按 var6 的四个level进行分组计算, 还是要分成四个数据集? 如果是后者的话, 可以这样. data Level_A Level_B Level_C Level_D; set test; if var6 = "Level A" then output Level_A; else if var6 = "Level B" then output Level_B; else if var6 = "Level C" then output Level_C; else if var6 = "Level D" then output Level_D; ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-11-5 13:24:53
1. 先按照var6 的四个级别 level 分开
    楼主是要按 var6 的四个level进行分组计算, 还是要分成四个数据集?
如果是后者的话, 可以这样.

data Level_A  Level_B  Level_C  Level_D;
     set test;
         if var6 = "Level A" then output Level_A;
    else if var6 = "Level B" then output Level_B;
    else if var6 = "Level C" then output Level_C;
    else if var6 = "Level D" then output Level_D;
run;

如果SAS的内存不够,可以先分成几个小数据集。然后再分组,再合并。

data subset_1;
     set test (firstobs=1 obs=100);
run;
data subset_2;
     set test(firstobs=101 obs=200);
run;
data subset_3;
     set test(firstobs=201);
run;



2. 按 var6 分组计算的 percent
proc sql;
     select var1, var2, var3, var4, var5, var6,
            sum(case when var5=0 then 1 end)  as count_V5_0,
            sum(case when  var5 ne 0 then 1 end) as count_v5_,
            count(var5) as nv5,
            calculated  count_v5_0 / calculated nv5 as percent_zero,
            calculated  count_v5_ / calculated nv5 as percent_nonzero
     from test
     group by var6;
quit;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-11-5 13:29:56
我去,这么有钱
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-11-6 11:41:32
R用得不多,感觉用sas都是基本的if then之类的就可以搞定。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-11-6 12:27:06
看起来不难,价格也不错
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-11-6 12:34:26
zhongdianshi 发表于 2015-11-6 11:41
R用得不多,感觉用sas都是基本的if then之类的就可以搞定。
那就先写写看看。我Excel的活很多,现在没有SAS但是R 有一年多没系统的用了,所以很多功能都淡忘了。

SAS 和 R 都可以。 能做出多少,先写多少步骤。 我可以以后再用SAS。

因为急用,我在Excel 里已经做了一半了。 剩下的一半数据太大,需要分成好多块再整合,这个太耗费时间。

谢谢拉。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群