Date: Sat, 23 Dec 2006 11:26:58 -0300
Reply-To: rdporto1 <rdporto1@TERRA.COM.BR>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: rdporto1 <rdporto1@TERRA.COM.BR>
Subject: Re: Holiday Tune Courtesy of SAS
Content-Type: text/plain; charset=iso-8859-1
Does anybody knows why did I get:
ERROR: Read Access Violation In Task ( DATASTEP ]
Exception occurred at (67ECE421)
Task Traceback
And how to solve this?
Happy Holidays,
Rogerio.
---------- Original message -----------
Date: Fri, 22 Dec 2006 14:46:34 -0500
Subject: Holiday Tune Courtesy of SAS
> I'm sure some of you have seen this before, but I figured, I'd send this
> out for the holidays.
>
> This was forwarded to me by a colleague of mine who had received it
> somewhere else a few years ago.
>
> Copy the code and execute it in SAS.
>
> Merry Christmas and Happy Holidays,
>
> Mark J. Lamias
>
> data holidays;
> retain fmtname '@$holiday';
> length data $3;
> ratio = 1.05946309436;
> str1 ='A A#B C C#D D#E F F#G G#';
> str2='A BbCbB#DbD EbFbE#GbG Ab';
> o = 1;
> do i = 0 to 87;
> p = 55 * ratio**i;
> data = compress(substr(str1,mod(i,12)*2+1,2)||o);
> output;
> if data^=compress(substr(str2,mod(i,12)*2+1,2)||o) then do;
> data = compress(substr(str2,mod(i,12)*2+1,2)||o);
> output;
> end;
> if mod(i,12)=2 then o=o+1;
> end;
> rename data=start p=label;
> keep fmtname data p;
> run;
>
> proc format cntlin=holidays;
> run;
>
> %macro play(input);
> data _Null_;
> %let i=1;
> %do %while(%scan(&input,&i,%str( ))^=);
> %let note = %scan(&input,&i,%str( ));
> %let pitch = %upcase(%scan(¬e,1,=));
> %let duration = %scan(¬e,2,=);
> %let i = %eval(&i+1);
> %if &pitch=R %then
> call sleep((1/&duration)*750);
> %else
> call sound(input("&pitch",$holiday.),(1/&duration)*300);
> ;
> %end;
> run;
> %mend;
>
> %play(%str(
> C6=1 B5=1.5 A5=6 G5=1 R=2 F5=2 E5=1 D5=1 C5=1
> R=2 G5=2 A5=1 R=2 A5=2 B5=1 R=2 B5=2 C6=.33
> C6=2 C6=2 B5=2 A5=2 G5=2 G5=1.5 F5=4 E5=2
> C6=2 C6=2 B5=2 A5=2 G5=2 G5=1.5 F5=4 E5=2 E5=2
> E5=2 E5=2 E5=2 E5=4 F5=4 G5=1 R=4 F5=4 E5=4
> D5=2 D5=2 D5=2 D5=4 E5=4 F5=1 R=4 E5=4 D5=4
> C5=2 C6=1 A5=2 G5=1.5 F5=6 E5=2 F5=2 E5=1 D5=1 C5=1
> ));
|