Date: Sat, 26 May 2007 20:28:14 +0000
Reply-To: toby dunn <tobydunn@HOTMAIL.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: toby dunn <tobydunn@HOTMAIL.COM>
Subject: Re: Proc FCMP and recursion
In-Reply-To: <20070526190639.OVIF22068.ibm56aec.bellsouth.net@mail.bellsouth.net>
Content-Type: text/plain; format=flowed
Paul ,
I didnt know they included it in SP4, albeit without being able to use it in
the data step it seems pretty much worthless to play with other than to
create the functions. As to how it works I am well versed as well as 9.2
MDPA as I had to read the sucker before I signed it.
Toby Dunn
On the other hand, you have different fingers. ~ LCG
The early bird may get the worm, but the second mouse gets the cheese in the
trap. ~ LCG
What happens if you get scared half to death, twice? ~ LCG
From: Paul Dorfman <sashole@BELLSOUTH.NET>
Reply-To: sashole@BELLSOUTH.NET
To: SAS-L@LISTSERV.UGA.EDU
Subject: Re: Proc FCMP and recursion
Date: Sat, 26 May 2007 15:06:39 -0400
Tony,
Whoa, wait a minute!
First, PROC FCMP is available in 9.1.3 (at least with SP4) - only the
subroutines and functions compiled by it cannot be used in the DATA step
(for THAT, one has to wait until 9.2, and I, for one, am looking forward to
it, and fancy the possibilities it promises). To ascertain this simple fact,
just run the example cited by the poster, or even a slightly modified one
like this:
proc fcmp outlib = sasuser.funcs.math ;
function fact(k) ;
if k = 1 then return(k) ;
put K = ;
z = k ; *preserve k ;
x = fact(k-1) ;
put 'after ' k = ;
k = z ; *recover k ;
k = k * x ;
return(k) ;
endsub ;
quit ;
options cmplib=sasuser.funcs ;
proc fcmp ;
x = fact (5) ;
put x = ;
run ;
And you will see that it runs perfectly well and prints what the PUTs tell
it to print in the output (I had expected to find it in the log). Moreover,
go to SASUSER, and you will find the catalog FUNCS with entires neatly
stored as follows:
Name Type Description
f(*)Subr0 cmpsub fact
f(*)Math fundcl
And you can click on each of them and - surprise? - find their definitions
inside. Looks like good folks at Base R&D look forward somewhat ahead of the
time.
Secondly, one does not have to break the law in order to run 9.2. I have for
a year now and been receiving incremental upgrades. Just enter MDPA (Master
Developer Parnter Agreement), do the (scant) paperwork, and nine-two away.
Incidentally, the contact for MDPA, Yvette Robers, operates from Austin,
just email her at yvette.roberts@sas.com and express interest.
Finally, I have to thank the original (albeit anonymous) poster, since
although I cannot answer his/her question yet, it spurred my interest. And I
have a question myself about the source of PROC COMP documentation you are
relying upon. The pointer will be appreciated!
Kind regards
-------------------
Paul Dorfman
Jax, FL
-------------------
>
>From: toby dunn <tobydunn@HOTMAIL.COM>
>Date: 2007/05/26 Sat AM 12:39:24 EDT
>To: SAS-L@LISTSERV.UGA.EDU
>Subject: Re: Proc FCMP and recursion
>
>SUBSCRIBE SAS-L Anonymours ,
>
>
>First off if you have access tyo proc fmcp you have a beta version of 9.2,
>which means you have signed your life away or you are tempting fate of the
>SAS Lawyers. If I were you I would one first stop posting 9.2 questions
>like to the list serve for legal reasons and two talk to your sas admin
who
>will route your question to the right SI person.
>
>Toby Dunn
>
>On the other hand, you have different fingers. ~ LCG
>
>The early bird may get the worm, but the second mouse gets the cheese in
the
>trap. ~ LCG
>
>What happens if you get scared half to death, twice? ~ LCG
>
>
>
>
>From: SUBSCRIBE SAS-L Anonymours <weiming.zhang@UCHSC.EDU>
>Reply-To: SUBSCRIBE SAS-L Anonymours <weiming.zhang@UCHSC.EDU>
>To: SAS-L@LISTSERV.UGA.EDU
>Subject: Proc FCMP and recursion
>Date: Fri, 25 May 2007 16:05:23 -0400
>
>Hi,
>
>I have been using Proc FCMP to do recursion. I found that it may modify
the
>variable in the caller. For instance,
>
>proc fcmp outlib=sasuser.funcs.math;
>function fact(k);
>if k = 1 then return(k);
>put "pre K = " k;
>z = k; *preserve k;
>x = fact(k-1);
>put "after k = " k;
>k = z; *recover k;
>k = k * x;
>return(k);
>endsub;
>run;quit;
>
>options cmplib=sasuser.funcs;
>proc fcmp;
>x = fact(5);
>put "x = " x;
>run;
>
>it will not give correct answer if the two commented line are removed.
Does
>anyone know why?
>
>thanks.
>
>wz
>
>_________________________________________________________________
>Catch suspicious messages before you open them—with Windows Live Hotmail.
>http://imagine-windowslive.com/hotmail/?locale=en-us&ocid=TXT_TAGHM_migration_HM_mini_protection_0507
>
_________________________________________________________________
More photos, more messages, more storage—get 2GB with Windows Live Hotmail.
http://imagine-windowslive.com/hotmail/?locale=en-us&ocid=TXT_TAGHM_migration_HM_mini_2G_0507