LZ不知道是不是可以这样理解比较简单点
若出口方每段贸易数据年份区间包括银行危机年份的,则TREAT=1;否则TREAT=0;
若出口方每段贸易数据的最后年份等于银行危机年份的,则STATUS=1;否则STATUS=0;
嗯,还有就是银行危机数据,一个出口方是否有多个年份发生危机(如0024 1994,0024 1995……)
下面这个程序时针对一个出口方只有一个年份发生危机的
- data test1;
- input in $ out $ size $ year fenduan group;
- cards;
- 001 0024 01010101 1990 1 1
- 001 0024 01010101 1991 1 1
- 001 0024 01010101 1994 2 1
- 001 0024 01010101 1995 2 1
- 001 0024 01010101 1996 2 1
- 001 0024 02020220 1993 3 2
- 001 0024 02020220 1994 3 2
- 001 0024 02020220 1995 3 2
- 001 0036 01010101 1996 4 3
- 001 0036 01010101 1997 4 3
- 001 0036 02020220 1998 5 4
- 001 0036 02020220 2001 6 4
- 002 0024 01010101 1991 7 5
- 002 0024 01010101 1994 8 5
- 002 0035 01010101 1995 9 6
- 002 0035 02000000 1993 10 7
- 002 0035 02000000 1994 10 7
- 002 0035 02000000 1998 11 7
- 002 0038 02020220 1993 12 8
- 002 0038 02020220 1994 12 8
- 002 0038 02020220 1995 12 9
- 003 0024 01010101 1996 13 10
- 003 0036 02020220 1993 14 11
- 003 0036 02020220 1994 14 11
- 003 0038 02020220 1995 15 12
- ;
- data test2;
- input out $ time;
- cards;
- 0024 1994
- 0035 1996
- 0036 1998
- 0038 1995
- ;
- proc sort data=test1;
- by out;
- run;
- data test;
- merge test1 test2;
- by out;
- run;
- proc sort data=test;
- by in ;
- run;
- data test;
- sum=0;
- do until(last.fenduan);
- set test;
- by fenduan;
- if year=time then x=1;/*判断每一个年份是否与银行发生危机的年份相同*/
- else x=0;
- sum+x;/*求出每一分段数据里面是否有与银行发生危机的年份相同,若没有则sum=0,若有则sum^=0*/
- if last.fenduan then do;
- if sum^=0 then do; /*如果有与银行发生危机的年份相同*/
- if x=1 then do; /*如果是最后一年与银行发生危机的年份相同*/
- STATUS=1;TREAT=1;
- end;
- else do; /*如果不是最后一年与银行发生危机的年份相同*/
- STATUS=0;TREAT=1;
- end;
- end;
- else do; /*如果没有与银行发生危机的年份相同*/
- STATUS=0;TREAT=0;
- end;
- end;
- /* output;*/ /*若注释表示只输出每段最后一条记录*/
- end;
- run;
复制代码