全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1435 2
2014-01-08
如果我有数据如下
F1  F2  F3   F4   M
0    1    0     1    A
1    0    0     0    A
3    8    0     2    B
.
.
.
9    0     7     1   B

F1-F4是数据, M是字母
现在我要看,比如,F1下面,A组中有多少是非0的,B组中多少非0的。
然后得到一个像下面的表格,比如,F1的A中有10个非0,占F1的A的5%。 求助,SAS code忘完了。。。。

A

B

F1

10

5%

F2

F3

F4


二维码

扫码加我 拉你入群

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

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

全部回复
2014-1-8 16:43:05
我用了几次proc sort, 如果数据量特别大,不建议采用。

data test;
input F1  F2  F3   F4   M $;
cards;
0    1    0     1    A
1    0    0     0    A
3    8    0     2    A
4    0    9     2    A
0    0    0     4    B
3    2    1     4    B
9    0    7     1    B
;
proc sort data=test;
by m;
run;
proc transpose data=test out=test1;
by m;
var f1-f4;
run;
data test2;
set test1;
array num[*] col:;
bign=0;
smalln=0;
do i=1 to dim(num);
if num[i] ne . then bign=bign+1;
if num[i] not in(.,0) then smalln=smalln+1;
end;
n=strip(put(smalln,best.));
pct=strip(put((smalln/bign*100),4.))||'%';
keep m _name_ n pct;
run;
proc sort data=test2;
by _name_;
run;
data test3;
merge test2(where=(m='A') rename=(n=na pct=pcta))
       test2(where=(m='B') rename=(n=nb pct=pctb));
by _name_;
drop m;
run;
data test4;
set test3(keep=_name_ na nb rename=(na=a nb=b))
     test3(keep=_name_ pcta pctb rename=(pcta=a pctb=b));
        by _name_;
        if last._name_ then call missing(_name_);
run;
二维码

扫码加我 拉你入群

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

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

2014-1-8 19:41:16
复制代码
不是完全按你的格式输出的
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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