在Sas中计算每月每次观察的变量

时间:2010-04-05 16:12:04

标签: count variables sas

一个简单的问题,我有以下类型的数据:

Ticker _ Date _ Fem Analyst(虚拟1如果为真)___那个月的变量就像beta

AA _ 01/04/2001 _ 1 ___ 0.61

AA _ 05/04/2001 _ 1 ___ 0.62

AA _ 08/04/2001 _ 1 ___ 0.63

AA _ 01/05/2002 _ 1 ___ 0.7

AA _ 04/05/2002 _ 1 ___ 0.71

AA _ 08/07/2002 _ 0 ___ 0.8

AA _ 07/04/2003 _ 1 ___ 0.4

依此类推。我想收到的内容如下:

Ticker _ Date fem分析师数量 男性分析师人数_ 总___变量

AA _ 04/2001 3 0 _ 3 ___ 0.63 < / p>

AA _ 05/2002 2 0 _ 2 ___ 0.71 < / p>

AA _ 07/2002 0 1 _ 1 ___ 0.8 < / p>

AA _ 04/2003 1 0 _ 1 ___ 0.4 < / p>

这是一个计数算法,允许我计算每个月某个公司的女性和男性分析员的数量(使用虚拟变量性别0或1)并删除该月的所有观察,除了最近的一个(例如08/04/01这变成04/01与0.63,这是公司AA公司04/01测试版的最新观察结果。这个例子解释了这一切我猜?

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你可能想要这样的东西:

/* Create the month variable into a string YYYY/MM */
data analysts0;
    set <your data>;
    format month $7.;
    month=cats(year(date),'/',put(month(date),z2.));
run;
/* Sort so you can do the by processing required for counting */
proc sort data=analyst0 out=analyst1;
    /* You need to include the date in the sort so the most recent is last */
    by ticker month date;
run;
/* Count */
data count;
    retain n_fem n_male 0;
    set analyst1;
    by ticker month;
    if first.ticker of first.month then do;
        n_fem=0;
        n_male=0;
    end;
    else do;
       if gender=1 then n_fem+1;
       else if gender=0 then n_male+1;
       else put 'Huh?';
    end;
    /* this outputs only the values you need.*/
    if last.ticker or last.month then output;
run;

这应该给你一般的想法 - 我现在无法访问SAS,所以我无法检查代码。有关更多详细信息,请参阅数据步骤中的保留和处理文档。