|
我编写的这个代码比较繁琐,能够实现所有编号标识,希望高手进一步指点。
data temp1;
set a1;
proc sort;
by f2 f12;
run;
data temp2(keep=f2 f12 num_in_firm) ;
set temp1;
by f2;
retain num_in_firm 0;
if first.f2 then num_in_firm=1;
else num_in_firm=num_in_firm+1;
proc sort;
by f2;
run;
data temp30(keep=f2 firm_id);
set temp2;
if num_in_firm ne 1 then delete;
run;
data temp3;
set temp30;
firm_id=_n_;
proc sort;
by f2;
run;
data temp4;
merge temp2 temp3;
by f2;
run;
proc sql;
create table temp5 as
select count(temp4.f2) as repeat_num, temp4.*
from temp4
group by f2
order by firm_id,num_in_firm,repeat_num ;
quit;
data temp6;
set temp5;
total_num=_n_;
run;
proc sql;
create table want as
select f2,firm_id, f12, num_in_firm,repeat_num,total_num
from temp6;
quit;
proc datasets lib=work nolist;
delete temp1 temp2 temp3 temp30 temp4 temp5 temp6 /memtype=data;
quit;
/*首先将数据按照 股票代码+日期 联合排序 */
/*f2代表公司股票代码, f12 代表日期 */
/*firm_id 代表同一公司 按照股票代码编号 后产生的 连续标号*/
/*num_in_firm 代表同一公司组内按照时间编号*/
/*repeat_num 代表公司 重复出现的次数,或者是 每个公司记录的 总条数*/
/*total_num 代表数据记录总的条数*/
|