这样一段程序,不理解distinct的意思。主要是第一段sql不明白,run了一下,但是我不知道为什么用了这个,“
select distinct
a.symbol,
b.value,
year(a.date)
as year,
b.date as date5
from
one a,
one b
where
a.symbol=b.symbol
and intck('year',b.date,a.date) between 1
and
5
”
就变成了
The SAS System
Obs symbol value year date5
1 ABP1 -0.0250 1998 18FEB1997
2 ABP1 -0.0250 1999 18FEB1997
3 ABP1 0.0500 1999 25FEB1998
4 ABP1 -0.0250 2000 18FEB1997
5 ABP1 0.0500 2000 25FEB1998
6 ABP1 -0.0250 2000 05MAR1999
7 ABP1 -0.0250 2001 18FEB1997
8 ABP1 0.0500 2001 25FEB1998
9 ABP1 -0.0250 2001 05MAR1999
10 ABP1 0.0600 2001 20MAR2000
11 ABP1 -0.0250 2002 18FEB1997
12 ABP1 0.0500 2002 25FEB1998
13 ABP1 -0.0250 2002 05MAR1999
14 ABP1 0.0600 2002 20MAR2000
15 ABP1 0.2500 2002 05MAR2001
16 ABP1 0.0500 2003 25FEB1998
17 ABP1 -0.0250 2003 05MAR1999
18 ABP1 0.0600 2003 20MAR2000
19 ABP1 0.2500 2003 05MAR2001
20 ABP1 0.4550 2003 07MAR2002
21 ABP1 -0.0250 2004 05MAR1999
22 ABP1 0.0600 2004 20MAR2000
23 ABP1 0.2500 2004 05MAR2001
24 ABP1 0.4550 2004 07MAR2002
25 ABP1 0.7300 2004 25FEB2003
26 ABP1 0.0600 2005 20MAR2000
27 ABP1 0.2500 2005 05MAR2001
28 ABP1 0.4550 2005 07MAR2002
29 ABP1 0.7300 2005 25FEB2003
30 ABP1 1.0100 2005 19FEB2004
31 ABP1 0.2500 2006 05MAR2001
32 ABP1 0.4550 2006 07MAR2002
33 ABP1 0.7300 2006 25FEB2003
34 ABP1 1.0100 2006 19FEB2004
35 ABP1 1.2500 2006 16FEB2005
36 ABP1 0.4550 2007 07MAR2002
37 ABP1 0.7300 2007 25FEB2003
38 ABP1 1.0100 2007 19FEB2004
39 ABP1 1.2500 2007 16FEB2005
40 ABP1 1.6500 2007 09FEB2006
41 ABT 0.5550 1992 14JAN1991
42 ABT 0.5550 1993 14JAN1991
43 ABT 0.6375 1993 14JAN1992
到底distinct是什么意思呢?先谢谢了!
/* test data */
data one;
input symbol $ value date :date9.;
format date date9.;
cards;
ABP1 -0.025
18feb1997
ABP1 0.05
25feb1998
ABP1 -0.025
05mar1999
ABP1 0.06
20mar2000
ABP1 0.25
05mar2001
ABP1 0.455
07mar2002
ABP1 0.73
25feb2003
ABP1 1.01
19feb2004
ABP1 1.25
16feb2005
ABP1 1.65
09feb2006
ABP1 1.87
08feb2007
ABT 0.555
14jan1991
ABT 0.6375
14jan1992
ABT 0.73
16jan1993
;
run;
proc sql;
create table two as
select distinct
a.symbol,
b.value,
year(a.date)
as year,
b.date as date5
from
one a,
one b
where
a.symbol=b.symbol
and intck('year',b.date,a.date) between 1
and
5
order by
a.symbol,
year,
date5;
quit;
proc sql;
create table three as
select distinct
symbol,
year,
count(symbol)
as n5,
avg(value)
as avg5,
std(value)
as std5
from
two
group
by
symbol,
year;
quit;