2017-01-28 41 views
0

我创造了这个fakedata为例:总结通过字符值在SAS

data fakedata; 
length name $5; 
infile datalines; 
input name count percent; 
return; 
datalines; 
Ania 1 17 
Basia 1 3 
Ola 1 10 
Basia 1 52 
Basia 1 2 
Basia 1 16 
; 
run; 

我想要的结果是:

table

--->总结计数和百分比为巴西亚

我想为巴西亚总结点数和百分比,因为她只有一次在表中的数字4和百分比83.我试着交换名称到一个如果要在proc sql中执行GROUP BY,但它会按顺序变化(我有这样的错误)。假设它并不困难,但我找不到解决方案。我也试过一些没有成功的数组。任何帮助感谢!

+0

你应该包括你想要得到的输出。 –

+0

好吧,即时写作 – aniusni

回答

1

这听起来像proc sql你想要做什么:

proc sql; 
    select name, count(*) as cnt, sum(percent) as sum_percent 
    from fakedata 
    group by name; 

您可以添加where条款得到的结果只是一个名字。

+0

它发生了一个错误:摘要函数仅限于SELECT和HAVING子句:( – aniusni

+0

@aniusni ...“order by”对您的结果似乎不是必要的,无论如何,您可以使用'如果你想按顺序排列,按'sum_percent'命令。 –

+0

好的,按顺序并退出它的工作:) – aniusni

0

嗯,其实我找到了答案。

proc summary data=fakedata; 
by name; 
var count percent; 
output out=wynik (drop = _FREQ_ _TYPE_) sum(count)=count sum(percent)=percent; 
run; 
+1

你的语法有点多余,你可以使用。 输出= wynik(drop = _ :) sum =; –

0

您可以返回一个步骤并使用PROC FREQ最有可能在一个步骤中生成此输出。根据计数百分比是不正确的,但我不确定他们的目的是,现在他们加起来超过100%。如果您已有一些摘要,则使用WEIGHT声明来说明计数。

proc freq data=fakedata; 
table name; 
weight count; 
run;