楼主: edragon1983
1230 6

[有偿编程] 求助计算组合频数 [推广有奖]

  • 0关注
  • 0粉丝

已卖:1655份资源

讲师

18%

还不是VIP/贵宾

-

威望
0
论坛币
5118 个
通用积分
7.3189
学术水平
0 点
热心指数
3 点
信用等级
0 点
经验
7801 点
帖子
217
精华
0
在线时间
432 小时
注册时间
2007-8-29
最后登录
2025-7-25

楼主
edragon1983 发表于 2020-3-2 12:05:41 |AI写论文
50论坛币
data x;
input x $ y $;
cards;
a1 m1
a1 m2
a2 m3
a3 m1
a3 m4
a4 m1
a4 m2
a5 m4
a5 m1
;

x是id。想得到的结果:变量y不同组合出现的频数。譬如m1+m2 频数为2; 单个m1频数是1;m1+m4频数为2.谢谢!

沙发
Cecilia_Xi 在职认证  发表于 2020-3-2 12:05:42
edragon1983 发表于 2020-3-2 12:48
可以将变量x视为研究个体(人),y为其购买物品的情况。a1这个人购买了m1和m2两种物品。a2这个人只购买了 ...
  1. /************************************1. 每个id一共买了几种商品*/
  2. proc sql;
  3.       create table want1 as
  4.           select distinct x, sum(n) as count from (select *,1 as n  from x)
  5.       group by x;
  6. quit;


  7. /************************************2. 不同商品组合的购买频数*/
  8. proc sort data=x;
  9. by x y;
  10. run;

  11. proc transpose data=x
  12.      out=x1(drop=_name_);
  13.       var y;
  14.           id y;
  15.           by x;
  16. run;

  17. /*商品共有哪几种*/
  18. proc sql;
  19.       create table product as
  20.           select distinct y
  21.           from x;
  22. quit;

  23. /*生成宏变量product,最后一步group by需要使用。特别适用于当商品种类多时*/
  24. proc sql;
  25.      select y into: groupby separated by ", "
  26.          from product;
  27. quit;

  28. proc sql;
  29.       create table want2(drop=n) as
  30.           select distinct *,sum(n) as count
  31.           from (select *,1 as n from  x1(drop=x))
  32.       group by &groupby;
  33. quit;
复制代码

藤椅
Cecilia_Xi 在职认证  发表于 2020-3-2 12:41:01
可以详细解释一下需求吗?没太理解为什么m1+m2 频数为2(a1和a4分别在m1和m2出现两次?); 单个m1频数是1;m1+m4频数为2(a3和a5分别在m1和m2出现两次?)

板凳
edragon1983 发表于 2020-3-2 12:48:24
Cecilia_Xi 发表于 2020-3-2 12:41
可以详细解释一下需求吗?没太理解为什么m1+m2 频数为2(a1和a4分别在m1和m2出现两次?); 单个m1频数是1; ...
可以将变量x视为研究个体(人),y为其购买物品的情况。a1这个人购买了m1和m2两种物品。a2这个人只购买了m3一种物品。目的是统计购买不同组合的人的频数
已有 1 人评分经验 收起 理由
eijuhz + 20 精彩帖子

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

报纸
edragon1983 发表于 2020-3-5 17:26:56
Cecilia_Xi 发表于 2020-3-2 12:05
大神,再请教下加入变量y取值全是中文,我在应用proc transpose data=x out=x1(drop=_name_);
var y;
id y;
by x;
run;时
会出现ERROR: ID 值“________”在“相同的 BY 组”中出现了两次。的提示

也即transpose后 中文值做不了sas变量,sas默认用________作为变量名。

叩谢!

地板
Cecilia_Xi 在职认证  发表于 2020-3-5 18:44:11
edragon1983 发表于 2020-3-5 17:26
大神,再请教下加入变量y取值全是中文,我在应用proc transpose data=x out=x1(drop=_name_);
var y;
i ...
transpose前运行一下下面这个option应该就没问题了(是global的option,sas关闭重启前只需要运行一次即可)
options validvarname=any;

7
edragon1983 发表于 2020-3-6 11:18:15
Cecilia_Xi 发表于 2020-3-5 18:44
transpose前运行一下下面这个option应该就没问题了(是global的option,sas关闭重启前只需要运行一次即可 ...
谢谢大神

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

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