For a university research project I am retrieving data from WRDS via SAS and am relatively new to SAS. I am trying to retrieve data in a specific interval provided by WRDS which
No idea what your error is but these lines in your macro look problematic.
First:
%symdel stock taq_ds filename start_time interval_seconds; */
%let stock = "COP";
%let taq_ds=taq.&tables:;
%let filename = &tables._&stock;
data _v_&tables / view=_v_&tables;
What is the purpose of the %SYMDEL
? You probably just want to make some %LOCAL macro variables instead. They will then disappear when the macro ends. So no need to delete them. If you need to set them to empty, so inside a %do
loop, then just use %let
statements.
Also do you really want to start a statement style comment at the end of the first line? Since the next three lines are all macro statements I think the *
will comment up to the semi-colon at the end of the data
statement.
Second:
DM 'log; file "/home/ &filename.log" replace';
DM "log; clear; ";
Why are you using DM commands? That can only work if you are actually still running SAS using Display Manager.
What are you trying to do here? If you want to write the log to a separate location then redirect BEFORE hand using
proc printto log="filename" new; run;
then close it afterwards.
proc printto log=log; run;
I am using SAS Studio working on the WRDS cloud. I have realized the following:
When I run my code - not as a macro - "block_by-block", then everything works very fine. If I run the entire script, I get an error in the data xtemp2 part:
73 '9:30:00't and '16:00:00't) and mode = 12 and EX =
73 ! 'N'; run; *Screen data to find the trade before a set
73 ! time interval data xtemp2; set _v_&tables; by symbol
___
180
73 ! date time; format itime rtime time12.; if
ERROR 180-322: Statement is not valid or it is used out of proper order.
But if I run my code once block-by-block, afterwards I can run the entire script without any issues.
So I think the solution is to run the code blocks sequentially. Is there a possibility to "simulate" a sequential run within the code?
edit: I tried to use the sleep function to pause the code there but that still doesn't work, it gives me the error:
129 data xtemp2;
130 set _v_&tables;
130 set _v_&tables;
___
180
ERROR 180-322: Statement is not valid or it is used out of proper order.
.
.
.
v&tables comes from my data step view.
edit: I tried the sleep function, however, it doesnt work. Funnily, if I run everything until data step view and then run everything from the actual data step the code words; and after that I can re-run the FULL code instead of splitting by two times.
I will create a new question which links back to this and the above mentioned question where I wrap the code into a macro...
SOLUTION FOUND: I had to add extra "run;" statements before the data steps and then it works (credits to Richard who found this).
This line is just wrong.
%local stock = "COP";
You are trying the define local macro variables named =
and "COP"
. You probably meant to do this.
%local stock ;
%let stock = "COP";