计算一个条件在SAS中成功的次数

时间:2014-09-04 05:13:57

标签: sas

我有一张表A,里面有实时值。

   
Amount  Count   Pct1    Pct2

 300    2   0.000   100.000
 1,891  2   0.001   100.000
 500    2   0.000   100.000
 100    2   0.000   100.000
 1,350  2   0.001   100.000
 2,648  2   0.001   100.000
 2,255  2   0.001   100.000
 500    2   0.000   100.000
 200    2   0.000   30.441
 10     2   0.000   100.000
 1,928  2   0.001   100.000
 40     2   0.000   100.000
 200    2   0.000   100.000
 256    2   0.000   100.000
 254    2   0.000   100.000
 100    2   0.001   100.000
 50     1   0.000   33.333
 1,512  2   0.001   100.000

我有一套带有一系列条件的表B.我想在SAS中生成条件成功计数。即如果我将下表中的第1行作为条件传递给表A,则成功2次。我正在使用联接来生成cartesin产品,但效率不高。我想要一种有效的方法来解决这个问题(类似于countifs函数在excel中的作用)。非常感谢你的帮助。

Amount Count Pct1 Pct2 Condion Success Count 1,576 2 0 100 4 1,537 2 0 100 4 1,484 2 0 100 5 1,405 2 0 100 5 1,290 2 0 100 6 1,095 2 0 100 6 948 2 0 100 6 932 2 0 100 6 914 2 0 100 6 887 2 0 100 6 850 2 0 100 6 774 2 0 100 6 707 2 0 100 6 704 2 0 100 6 695 2 0 100 6 646 2 0 100 6 50 1 0 5.42 16 50 1 0 5.42 16

1 个答案:

答案 0 :(得分:1)

你说过你曾尝试过制作笛卡尔产品。但是,由于您没有发布任何代码,我不确定您是否尝试制作完整产品然后计算行数。在一个SQL语句中进行计数要快得多,因为实际上完全没有在任何地方写入完整的笛卡尔积。像这样:

proc sql;
    create table tableC as
    select c.*, coalesce(s,0) as SuccessCount from TableB c
    left join (
    select id, count(*) as s from TableA a,TableB b
    where 
    a.amount >= b.amount and
    a.count >= b.count and
    a.pct1 >= b.pct1 and
    a.pct2 >= b.pct2
    group by id
    ) as d 
    on c.id = d.id
    ;
quit;

请注意,tableB需要一些唯一的id列。你应该总是有一些列用作id,但如果你没有它已经很简单就像这样创建它,例如:

data tableB;
    set tableB;
    id = _N_;
run;