Date: Tue, 5 May 2009 08:22:42 -0400
Reply-To: Gerhard Hellriegel <gerhard.hellriegel@T-ONLINE.DE>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: Gerhard Hellriegel <gerhard.hellriegel@T-ONLINE.DE>
Subject: Re: Macro trouble
Content-Type: text/plain; charset=ISO-8859-1
I see some problems, there might be others too:
%if &hovedgruppe ^= ' ' and &arkivskaper ^= ' ' %then
%do;
where hovedgruppe eq "&hovedgruppe"
and arkivskaper eq "&arkivskaper"
%end;
%else %if &hovedgruppe ^= ' ' and &arkivskaper = ' ' %then
%do;
where hovedgruppe eq "&hovedgruppe"
%end;
%else %if &hovedgruppe = ' ' and &arkivskaper ^= ' ' %then
%do;
where arkivskaper eq "&arkivskaper"
%end;
%if &hovedgruppe ^= ' ' ... should look as:
%if &hovedgruppe ^= ...
If you compare macro variables with constants, don't use " " or ' ', cause
they are not part of the contents. You can use %str() if you want.
Gerhard
On Tue, 5 May 2009 05:07:19 -0700, Anaconda <rune@FASTLANE.NO> wrote:
>The macro PICK_RECORDS below is not acting the way I want or expect it
>to do. Can someone tell me what is the problem with it.
>
>Regards
>Anaconda
>
>
>
>data ds_01;
> attrib
> Hovedgruppe length = $18.
> Arkivskaper length = $23.
> Namn_register length = $16.
> Ark_per length = $21.
> Dep_nr length = $1.
> Test_ferdig length = $10.
> Test_resultat length = $19.
> eph_dato_utg length = $10.
> ;
> infile cards;
> input
> @01 Hovedgruppe $18.
> @20 Arkivskaper $23.
> @44 Namn_register $16.
> @61 Ark_per $21.
> @84 Dep_nr $1.
> @88 Test_ferdig $10.
> @98 Test_resultat $19.
> @118 Eph_dato_utg $10.
> ;
> datalines;
>Universitetene Universitetet i Bergen Fond og legater
>01.01.1998-11.09.2006 1 08.12.2006 Ber om opplysningar 08.12.2006
>Universitetene Universitetet i Bergen Fond og legater
>01.01.1998-11.09.2006 2 08.01.2007 Ber om opplysningar 08.01.2007
>Den Norske Kyrkja M�re bisped�mmekontor
>01.05.1998-30.09.2005 1 03.04.2000 Ber om opplysningar 03.04.2000
>Fylkesmennene Fylkesmannen i �stfold Administrasjon
>01.01.1997-31.12.2002 1 22.10.1998 Ber om opplysningar 22.10.1998
>H�gskolene H�gskolen i Akershus
>01.03.1998-31.12.2006 1 30.09.2005 Ber om opplysningar 30.09.2005
>run;
>
>proc sort data = ds_01 out = ds_02;
> by
> hovedgruppe
> arkivskaper
> ark_per
> dep_nr
> ;
> where test_ferdig ne ' '
> and test_resultat ne ' ' ;
>run;
>
>%macro pick_records(hovedgruppe = ,
> arkivskaper =
> );
> %put HOVEDGRUPPE = &hovedgruppe;
> %put ARKIVSKAPER = &arkivskaper;
> proc sql;
> create table _tmp_ds_02 as
> select
> hovedgruppe ,
> arkivskaper ,
> namn_register ,
> ark_per ,
> dep_nr ,
> test_resultat ,
> eph_dato_utg ,
> max(dep_nr) as _siste_dep
> from ds_02
> %if &hovedgruppe ^= ' ' and &arkivskaper ^= ' ' %then
>%do;
> where hovedgruppe eq "&hovedgruppe"
> and arkivskaper eq "&arkivskaper"
> %end;
> %else %if &hovedgruppe ^= ' ' and &arkivskaper = ' ' %then
>%do;
> where hovedgruppe eq "&hovedgruppe"
> %end;
> %else %if &hovedgruppe = ' ' and &arkivskaper ^= ' ' %then
>%do;
> where arkivskaper eq "&arkivskaper"
> %end;
>
> group by
> hovedgruppe,
> arkivskaper,
> namn_register,
> ark_per
> ;
> quit;
>%mend;
>/* This seems to work OK */
>%pick_records(hovedgruppe = Den Norske Kyrkja,
> arkivskaper = M�re bisped�mmekontor
> );
>/* This one is not picking up the one record i expect */
>%pick_records(hovedgruppe = ,
> arkivskaper = M�re bisped�mmekontor
> );
>
>/* This one is not picking up the two records i expect */
>%pick_records(hovedgruppe = Universitetene,
> arkivskaper =
> );
>
>/* I want this one to pick up all 4 records. How can i obtain that?
>*/
>%pick_records(hovedgruppe = ,
> arkivskaper =
> );
|