There are two methods of performing the crosslist selection function. The first method uses two Fame namelists, and the second method uses one namelist and one BY group specified in the WHERE= clause of the INSET= option.
For example, suppose that your Fame database has a string case series named TICKER, so that when the Fame NL function is used on TICKER, it returns the following namelist:
Ticker = {AOL, C, CVX, F, GM, HPQ, IBM, INDUA, INTC, SPX, SUNW, XOM}
Also suppose your time series are named in fame_namelist2 as
{adjust, close, high, low, open, volume, uclose, uhigh, ulow, uopen, uvolume}
When you specify the following statements, the 132 variables shown in Table 41.5 are selected by the CROSSLIST= option:
LIBNAME test sasefame 'physical name of test database' RANGE='01jan1999'd - '31mar1999'd CROSSLIST=(nl(ticker), {adjust, close, high, low, open, volume, uclose, uhigh, ulow, uopen, uvolume}) ;
Table 41.5: SAS Variables Selected by CROSSLIST= Option
AOL.ADJUST |
C.ADJUST |
CVX.ADJUST |
F.ADJUST |
AOL.CLOSE |
C.CLOSE |
CVX.CLOSE |
F.CLOSE |
AOL.HIGH |
C.HIGH |
CVX.HIGH |
F.HIGH |
AOL.LOW |
C.LOW |
CVX.LOW |
F.LOW |
AOL.OPEN |
C.OPEN |
CVX.OPEN |
F.OPEN |
AOL.UCLOSE |
C.UCLOSE |
CVX.UCLOSE |
F.UCLOSE |
AOL.UHIGH |
C.UHIGH |
CVX.UHIGH |
F.UHIGH |
AOL.ULOW |
C.ULOW |
CVX.ULOW |
F.ULOW |
AOL.UOPEN |
C.UOPEN |
CVX.UOPEN |
F.UOPEN |
AOL.UVOLUME |
C.UVOLUME |
CVX.UVOLUME |
F.UVOLUME |
AOL.VOLUME |
C.VOLUME |
CVX.VOLUME |
F.VOLUME |
GM.ADJUST |
HPQ.ADJUST |
IBM.ADJUST |
INDUA.ADJUST |
GM.CLOSE |
HPQ.CLOSE |
IBM.CLOSE |
INDUA.CLOSE |
GM.HIGH |
HPQ.HIGH |
IBM.HIGH |
INDUA.HIGH |
GM.LOW |
HPQ.LOW |
IBM.LOW |
INDUA.LOW |
GM.OPEN |
HPQ.OPEN |
IBM.OPEN |
INDUA.OPEN |
GM.UCLOSE |
HPQ.UCLOSE |
IBM.UCLOSE |
INDUA.UCLOSE |
GM.UHIGH |
HPQ.UHIGH |
IBM.UHIGH |
INDUA.UHIGH |
GM.ULOW |
HPQ.ULOW |
IBM.ULOW |
INDUA.ULOW |
GM.UOPEN |
HPQ.UOPEN |
IBM.UOPEN |
INDUA.UOPEN |
GM.UVOLUME |
HPQ.UVOLUME |
IBM.UVOLUME |
INDUA.UVOLUME |
GM.VOLUME |
HPQ.VOLUME |
IBM.VOLUME |
INDUA.VOLUME |
INTC.ADJUST |
SPX.ADJUST |
SUNW.ADJUST |
XOM.ADJUST |
INTC.CLOSE |
SPX.CLOSE |
SUNW.CLOSE |
XOM.CLOSE |
INTC.HIGH |
SPX.HIGH |
SUNW.HIGH |
XOM.HIGH |
INTC.LOW |
SPX.LOW |
SUNW.LOW |
XOM.LOW |
INTC.OPEN |
SPX.OPEN |
SUNW.OPEN |
XOM.OPEN |
INTC.UCLOSE |
SPX.UCLOSE |
SUNW.UCLOSE |
XOM.UCLOSE |
INTC.UHIGH |
SPX.UHIGH |
SUNW.UHIGH |
XOM.UHIGH |
INTC.ULOW |
SPX.ULOW |
SUNW.ULOW |
XOM.ULOW |
INTC.UOPEN |
SPX.UOPEN |
SUNW.UOPEN |
XOM.UOPEN |
INTC.UVOLUME |
SPX.UVOLUME |
SUNW.UVOLUME |
XOM.UVOLUME |
INTC.VOLUME |
SPX.VOLUME |
SUNW.VOLUME |
XOM.VOLUME |
Instead of using two namelists, you can use the WHERE= clause in an INSET= option to perform the crossproduct of the BY variables specified in your input data set via the WHERE= clause and the members named in your namelist. The following statements define a SAS input data set named INSETA to use as input for the CROSSLIST= option instead of using the Fame namelist:
DATA INSETA; LENGTH tick $5; /* AOL, C, CVX, F, GM, HPQ, IBM, INDUA, INTC, SPX, SUNW, XOM */ tick='AOL'; output; tick='C'; output; tick='CVX'; output; tick='F'; output; tick='GM'; output; tick='HPQ'; output; tick='IBM'; output; tick='INDUA'; output; tick='INTC'; output; tick='SPX'; output; tick='SUNW'; output; tick='XOM'; output; RUN; LIBNAME test sasefame 'physical name of test database' RANGE='01jan1999'd - '31mar1999'd INSET=(inseta, where=tick) CROSSLIST=( {adjust, close, high, low, open, volume, uclose, uhigh, ulow, uopen, uvolume}) ;
Using a SAS INSET statement with a WHERE clause and using a Fame namelist in the CROSSLIST= statement are equivalent ways of performing the same selection function. In the preceding example, the Fame ticker namelist corresponds to the SAS input data set’s BY variable named TICK.
Note that the fame_bygroup that you specify in the WHERE= clause must match the BY-variable name used in your input data set in order for the CROSSLIST= option to perform the desired selection. If one of the time series listed in fame_namelist2 does not exist, the SASEFAME engine stops processing the remainder of the namelist. For complete results, make sure that your fame_namelist2 is accurate and does not name unknown variables. The same holds true for fame_namelist1 and the BY-variable values named in the input data set and used in the WHERE= clause.