全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2425 9
2013-12-02
悬赏 100 个论坛币 未解决
复制代码


希望得到的结果
var cat  n
x     1   3
       2   2
y     1   2
       2  3
注意不能用proc freq过程,macro程序中可以用data步和sql过程。
二维码

扫码加我 拉你入群

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

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

全部回复
2013-12-3 05:45:34
抛砖引玉

proc sql;
create table a1 as
select
       distinct A.x as cat,
       count(A.x) as n,
           'x' as id
from a as A
group by a.x

union all

select
       distinct a.y as cat,
           count(a.y) as n,
           'y' as id
from a as A
group by a.y
;
quit;
二维码

扫码加我 拉你入群

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

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

2013-12-3 09:07:38
%macro cnt;

proc sql noprint;
select name into: varlist separated by " " from dictionary.columns
where libname='WORK' and memname='A';
quit;

%let i=1;
%do %until(%scan(&varlist,&i)=%str( ));
proc sql;
create table a&i as
select "%scan(&varlist,&i)" as var, %scan(&varlist,&i) as cat,count(%scan(&varlist,&i)) as n
from a
group by 1,2;
quit;
%let i=%eval(&i+1);
%end;

%let cnt=%sysfunc(count(&varlist,%str( )));
data combine;
set
%do i=1 %to %eval(&cnt+1);
a&i
%end;
;
run;
%mend;
%cnt

data wanted;
set combine;
by notsorted var;
if not first.var then var='';
run;
二维码

扫码加我 拉你入群

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

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

2013-12-3 12:44:48
复制代码
二维码

扫码加我 拉你入群

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

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

2013-12-3 17:32:27
我就想到简单的分开用proc univariate来做,再把结果set到一起

proc univariate data=a;
class x;
var x ;
output out=b
n=n;
run;

proc univariate data=a;
class y;
var y ;
output out=c
n=n;
run;

data b;
length var $1.;
set b;
var='x';
rename x=cat;
run;

data c;
length var $1.;
set c;
var='y';
rename y=cat;
run;

data d;
set b c;
run;
二维码

扫码加我 拉你入群

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

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

2013-12-4 08:33:04

data b(keep=group cat);
set a;
array newvar _numeric_;
do over newvar;
  group=vname(newvar);
  cat=newvar;
  output;
end;
run;

proc tabulate data=b;
class group cat;
table group='var'*cat,n*f=2.;
run;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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