SAS中文论坛

标题: 程序求助,等高手,多谢多谢! [打印本页]

作者: shiyiming    时间: 2011-12-15 08:35
标题: 程序求助,等高手,多谢多谢!
贸易数据格式举例如下(为贸易数据):
有不同的进口方,不同的出口方,不同的商品。年份连续或者不连续。
同时进口方为多个,出口方为多个,产品类别多个。
相同进口出口方和商品的,归为同一组。其中年份连续的各项(即相同进口方、出口方以及相同商品的并且年份连续的)归为同一段。
进口方 出口方 产品类别 年份 分段 分组
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
.
.
.


另外我有发生银行危机数据(多个出口方,多个年份)
出口方 年份
0024 1994
0035 1996
0036 1998
0038 1995
。。。

我需要生成两个状态变量。STATUS和TREAT
出口方无银行危机数据 或者贸易分段不包括银行危机年份的  STATUS=1 TREAT=0

出口方每段贸易数据年份区间包括银行危机年份的, 每段的最后年份等于银行危机年份的(比如分段=12) STATUS=1 TREAT=1
每段的最后年份不等于银行危机年份的(比如分段=2) STATUS=0 TREAT=1
作者: shiyiming    时间: 2011-12-15 22:17
标题: Re: 程序求助,等高手,多谢多谢!
你把数据多弄一点,数据太少的话编出来的程序也不好得到检验。把意思说明白些。
作者: shiyiming    时间: 2012-5-18 21:53
标题: Re: 程序求助,等高手,多谢多谢!
data ads;
input ex im type year rn group;
retain x y z 0;
if ( ex^=lag(ex) | im^=lag(im) | type^=lag(type) ) then x+1;
if ( abs(dif(year))>1 ) then y+1;
if ( x^=lag(x) | y^=lag(y) ) then z+1;
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
;
作者: shiyiming    时间: 2012-5-19 10:03
标题: Re: 程序求助,等高手,多谢多谢!
[code:thdaagdr]data maoyi;
        length ex $3 im $4 type $8 year 8;
        label ex='进口方' im='出口方' type='产品类别' year='年份';
        infile cards dsd missover dlm=' ';
        input  ex im type year;
        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
;
run;
data result(drop=lag);
        set maoyi;
        by ex im type year;
        lag=lag(year);
        if first.type then do;rn+1;group+1;end;
        else if year^=lag+1 then rn+1;
        label rn='分段' group='分组';
run;[/code:thdaagdr]
作者: shiyiming    时间: 2012-7-11 13:45
标题: Re: 程序求助,等高手,多谢多谢!
做个记号! <!-- s:lol: --><img src="{SMILIES_PATH}/icon_lol.gif" alt=":lol:" title="Laughing" /><!-- s:lol: -->




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2