Sas 按条件垂直求和

Sas 按条件垂直求和,sas,Sas,我查看了前一篇文章,寻找可能的解决方案,但仍然不起作用。我想使用ID作为公共标识符对行进行求和。num变量是常量。id和comp是我想要用来创建pct变量的两个变量,它=[comp=1]/num之和 拥有: 想要: 目前有: proc sort data=have; by id; run; data want; retain tot 0; set have; by id; if first.id then do; tot =

我查看了前一篇文章,寻找可能的解决方案,但仍然不起作用。我想使用ID作为公共标识符对行进行求和。num变量是常量。id和comp是我想要用来创建pct变量的两个变量,它=[comp=1]/num之和

拥有:

想要:

目前有:

proc sort data=have;
    by id;
run;

data want;
    retain tot 0;
  set have;
    by id;
        if first.id then do;
            tot = 0;
            end;
        if comp in (1) then tot + 1;
            else tot + 0;
        if last.id;
            pct = tot / num;            
        keep id tot pct; 
        output;
run;

我使用SQL来处理类似的事情。您可以在数据步骤中完成,但SQL更紧凑

data have;
input id  Comp    Num;
datalines;
1   1       2
2   0       3
3   1       1
2   1       3
1   1       2
2   1       3
;
run;

proc sql noprint;
create table want as
select id, 
    sum(comp) as tot, 
    sum(comp)/count(id) as pct
from have
group by id;
quit;

我使用SQL来处理类似的事情。您可以在数据步骤中完成,但SQL更紧凑

data have;
input id  Comp    Num;
datalines;
1   1       2
2   0       3
3   1       1
2   1       3
1   1       2
2   1       3
;
run;

proc sql noprint;
create table want as
select id, 
    sum(comp) as tot, 
    sum(comp)/count(id) as pct
from have
group by id;
quit;

您好,您的问题有一个更优雅的解决方案:

proc sort data = have;
    by id;
run;

data want; 
    do _n_ = 1 by 1 until (last.id);
        set have ; 
        by id ; 
        tot = sum (tot, comp) ; 
    end ; 
    pct = tot / num ; 
run;

我希望这是清楚的。我也使用sql,因为我是新手,DOW循环相当复杂,但在您的情况下,它非常简单。

您好,有一个更优雅的解决方案来解决您的问题:

proc sort data = have;
    by id;
run;

data want; 
    do _n_ = 1 by 1 until (last.id);
        set have ; 
        by id ; 
        tot = sum (tot, comp) ; 
    end ; 
    pct = tot / num ; 
run;

我希望这是清楚的。我也使用sql,因为我是新手,DOW循环相当复杂,但在您的例子中它非常简单。

一个后续问题:为什么我会丢失have数据集中的所有变量,而输出只包含sql语句中的三个变量?因为sql语句定义了将输出哪些变量。SAS文档PROC SQL非常好,有很多相关示例。这就是我自学SQL语法的方法。接下来的一个问题是:为什么我会丢失have数据集中的所有变量,而输出只包含SQL语句中的三个变量?因为SQL语句定义了将输出哪些变量。SAS文档PROC SQL非常好,有很多相关示例。我就是这样自学SQL语法的。