Created
November 5, 2018 21:34
-
-
Save statgeek/feefc9ec42503beda64bf8cf9479eb1d to your computer and use it in GitHub Desktop.
SAS Christmas Carol
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /*This program plays a Christmas Carol | |
| Not sure of original source but it was posted here: | |
| https://groups.google.com/forum/#!topic/comp.soft-sys.sas/a9lmYmTNlv8 | |
| */ | |
| 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)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment