楼主: 消散2
1218 1

[问答] 请大神们通过SQL 或者使用SAS转置解决如下问题。 [推广有奖]

  • 0关注
  • 0粉丝

本科生

33%

还不是VIP/贵宾

-

威望
0
论坛币
322 个
通用积分
4.0000
学术水平
1 点
热心指数
2 点
信用等级
1 点
经验
1764 点
帖子
12
精华
0
在线时间
160 小时
注册时间
2016-3-25
最后登录
2022-5-15

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据集 n
label      critfl       count
a           no           1
a           total        1
b           yes          12
b            no           2
b            total        14

想变成的样子

label      critfl       count       percent
a           no           1              100
a           total        1
b           yes          12             85.7
b            no           2              14.3
b            total        14


就是同一个label的no/total   yes/total   得到的数值新变成一个变量。我通过转置再转置能解决这个问题,但是觉得很low,不知道有没有大神能快速的解决这个问题。
二维码

扫码加我 拉你入群

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

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

关键词:sql percent Total label Count

回帖推荐

头顶妖娆小宇宙 发表于2楼  查看完整内容

我暂时想到这个方法 data n; input label $ critfl $ count ; cards; a no 1 a total 1 b yes 12 b no 2 b total 14 ; run; proc sql noprint; create table n1 as select a.*, b.count as allcount from n as a left join n(where=(critfl='total')) as b on a.label=b.label group by a.label; quit; data n2; set n1; if critfl ne 'total' then percent= count/all ...
已有 1 人评分热心指数 收起 理由
eijuhz + 1 精彩帖子

总评分: 热心指数 + 1   查看全部评分

我暂时想到这个方法
data n;
  input label $ critfl $ count ;
  cards;
  a no 1
  a total 1
  b yes 12
  b no 2
  b total 14
  ;
run;

proc sql noprint;
  create table n1 as
  select a.*, b.count as allcount
  from n as a left join n(where=(critfl='total')) as b
  on a.label=b.label
  group by a.label;
quit;

data n2;
  set n1;
  if critfl ne 'total' then percent= count/allcount *100;
run;
已有 1 人评分论坛币 收起 理由
admin_kefu + 30 热心帮助其他会员

总评分: 论坛币 + 30   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 09:04