楼主: reduce_fat
715 11

[问答] 重金 888 悬赏 SAS 或 R 语言编程实际问题 [推广有奖]

荣誉版主

海外论坛首席管理员

已卖:18504份资源

泰斗

28%

还不是VIP/贵宾

-

TA的文库  其他...

海外原创经济论文和写作技巧

威望
11
论坛币
3591257 个
通用积分
34054.8393
学术水平
6834 点
热心指数
7193 点
信用等级
6665 点
经验
1830 点
帖子
12424
精华
78
在线时间
1974 小时
注册时间
2011-6-13
最后登录
2025-10-23

一级伯乐勋章 初级热心勋章 初级学术勋章 中级热心勋章 中级学术勋章 高级学术勋章 初级信用勋章 特级学术勋章 高级热心勋章 中级信用勋章 特级热心勋章 高级信用勋章 特级信用勋章

楼主
reduce_fat 发表于 2015-11-5 13:24:52 |AI写论文
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
下载链接: https://bbs.pinggu.org/a-1909169.html

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; ...
关键词:实际问题 语言编程 Delivery deliver Beyond 语言编程 Excel 电脑
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
xiaodao99 + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

复制粘贴积分链接 https://bbs.pinggu.org/ext8_airdrop.php?airdropfrom^^uid=2669999

沙发
封神榜! 发表于 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;

藤椅
cadxpzm 发表于 2015-11-5 13:29:56
我去,这么有钱

板凳
zhongdianshi 发表于 2015-11-6 11:41:32
R用得不多,感觉用sas都是基本的if then之类的就可以搞定。

报纸
万人往LVR 在职认证  发表于 2015-11-6 12:27:06
看起来不难,价格也不错

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

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

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

谢谢拉。

7
reduce_fat 发表于 2015-11-6 12:35:40
万人往LVR 发表于 2015-11-6 12:27
看起来不难,价格也不错
那为什么不试一下呢?不全也有部分奖励。能解决部分问题也好。谢谢。 

8
jiangbeilu 学生认证  发表于 2015-11-6 13:23:20
R就是吃内存的,运气不了SAS,R更是个问题啦

9
万人往LVR 在职认证  发表于 2015-11-6 13:51:00
reduce_fat 发表于 2015-11-6 12:35
那为什么不试一下呢?不全也有部分奖励。能解决部分问题也好。谢谢。 
在上班,明天看看要是没人回的话我再来
已有 1 人评分经验 收起 理由
reduce_fat + 40 鼓励积极发帖讨论

总评分: 经验 + 40   查看全部评分

10
reduce_fat 发表于 2015-11-7 04:51:47
jiangbeilu 发表于 2015-11-6 13:23
R就是吃内存的,运气不了SAS,R更是个问题啦
不是运行不了SAS,是管数据的地方没有SAS,我只能到管数据的地方运行。 R免费,我就用了。 8 GB 内存使劲吃,Excel 吃到100%都做不完, R 总得有提高吧。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-24 11:51