楼主: biuu
1984 11

恳请大神们教教我怎样写SAS程序来完成分组?! [推广有奖]

  • 0关注
  • 0粉丝

已卖:1份资源

初中生

0%

还不是VIP/贵宾

-

威望
0
论坛币
32 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
417 点
帖子
11
精华
0
在线时间
7 小时
注册时间
2013-3-20
最后登录
2018-6-22

楼主
biuu 发表于 2016-6-23 17:59:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
现有6种产品和10位客户的使用情况如下表,其中1=使用,0=不使用,“.”=数据缺失:
客户/产品名称b1b2b3b4b5b6
a1010010
a2110101
a3100..1
a4011111
a5000100
a6000000
a7101111
a8.01000
a91.1011
a10001101
要求: 按上述信息将客户使用产品情况统计整理后填入下表:
使用产品数客户人数占总人数%95%可信区间
使用1种
使用2种
使用3种
使用≥4种
合计


楼主是个SAS小白,只会非常基础的SAS入门,很多函数的意义也还不太清楚,恳请大神指教!还请大神们在写程序的时候注一下程序的用途或者意义。非常感谢!
二维码

扫码加我 拉你入群

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

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

关键词:sas程序 数据缺失 非常感谢 可信区间 A50 程序 分组 SAS

沙发
吕小布韦 发表于 2016-6-23 20:34:55
  1. data a;
  2. input name $ product1-product6;
  3. length label $3.;
  4. sum=sum(of product1-product6);
  5. if sum<=3 then label=sum;
  6. else label='>3';
  7. datalines;
  8. a1 0 1 0 0 1 0
  9. a2 1 1 0 1 0 1
  10. a3 1 0 0 . . 1
  11. a4 0 1 1 1 1 1
  12. a5 0 0 0 1 0 0
  13. a6 0 0 0 0 0 0
  14. a7 1 0 1 1 1 1
  15. a8 . 0 1 0 0 0
  16. a9 1 . 1 0 1 1
  17. a10 0 0 1 1 0 1
  18. ;
  19. run;

  20. proc freq data=a;
  21. table label;
  22. run;
复制代码


这个的话还得手动填, 不知道你是不是要自动生成的数据集?

藤椅
biuu 发表于 2016-6-23 21:17:30
吕小布韦 发表于 2016-6-23 20:34
这个的话还得手动填, 不知道你是不是要自动生成的数据集?
谢谢回复 。 不过这段程序
sum=sum(of product1-product6);
if sum<=3 then label=sum;
else label='>3';
只能是对是用<=3种或>3种产品的客户做个标记吧?并不能实现表格要求的1种、2种、3种和4种及以上的分组要求。
并且,因为有缺失值的存在,虽然个别变量存在缺失,但有缺失的观测并不排除在统计量之外。所以单纯用求和的方法似乎不能满足分组要求?

板凳
吕小布韦 发表于 2016-6-23 21:30:10
<=3的情况下,label的值就是sum的值,sum是1就是1,所以能分开1,2,3

如果所有的值都缺失, 则label也缺失,在freq中也能体现出来, 如果你想要把label=0和label=. 则再加一个if就好.

你直接放到sas里运行一下看一下结果就知道了.

报纸
吕小布韦 发表于 2016-6-23 21:32:01
  1. label    Frequency     Percent
  2. ------------------------------
  3.   .             1        9.09
  4.   0             1        9.09
  5.   1             2       18.18
  6.   2             2       18.18
  7.   3             1        9.09
  8. >3              4       36.36
复制代码


这是运行结果,第一行是所有六个产品都为缺失的

地板
biuu 发表于 2016-6-23 22:35:57
吕小布韦 发表于 2016-6-23 21:32
这是运行结果,第一行是所有六个产品都为缺失的
谢谢,可能是我没讲清楚缺失,咱们的理解不一样。刚我自己跑了一个:
data a;
input name$3. b1 b2 b3 b4 b5 b6;
cards;
a1        0        1        0        0        1        0
a2        1        1        0        1        0        1
a3        1        0        0        .        .        1
a4        0        1        1        1        1        1
a5        0        0        0        1        0        0
a6        0        0        0        0        0        0
a7        1        0        1        1        1        1
a8        .        0        1        0        0        0
a9        1        .        1        0        1        1
a10        0        0        1        1        0        1
;
run;
data a;
set a;
if b1=1 then m=1;
else m=0;
array n[5] b2 b3 b4 b5 b6;
do i=1 to 5;
if n=1 then m=m+1;
end;
drop i;
if m=0 then group=0;
if m=1 then group=1;
if m=2 then group=2;
if m=3 then group=3;
if m>=4 then group=4;
proc freq ;
table group;
run;

结果:


group频数百分比累积
频数
累积
百分比
0110.00110.00
1220.00330.00
2220.00550.00
3110.00660.00
4440.0010100.00






7
吕小布韦 发表于 2016-6-24 06:23:59
biuu 发表于 2016-6-23 22:35
谢谢,可能是我没讲清楚缺失,咱们的理解不一样。刚我自己跑了一个:
data a;
input name$3. b1 b2 b3  ...
咱俩的结果这不是一样么。我那里面第一行的缺失是我人为造了一行六个值全都缺失的。我的后五行和你的是一样的。
还有你的程序里面,数组用的时候没下标啊。再就是,既然m<4的时候,group的值和m的值一样,直接group=m一样不就行了。我写的程序你跑了试了吗

8
吕小布韦 发表于 2016-6-24 06:25:57
求和函数sum是将缺失记为0的,所以缺失值对sum函数没影响。你写的那个程序太冗杂了。数组也没必要用。

9
biuu 发表于 2016-6-24 13:00:49
吕小布韦 发表于 2016-6-24 06:25
求和函数sum是将缺失记为0的,所以缺失值对sum函数没影响。你写的那个程序太冗杂了。数组也没必要用。
哦哦,明白了。之前没注意多了一行数据。非常感谢您!

10
biuu 发表于 2016-6-24 13:50:11
吕小布韦 发表于 2016-6-24 06:25
求和函数sum是将缺失记为0的,所以缺失值对sum函数没影响。你写的那个程序太冗杂了。数组也没必要用。
那如果缺失不算在内,分组要求所有产品变量都有1或0的值,还是做这个分组表,要怎么写呢?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-27 06:08