Menu
  • HOME
  • TAGS

SAS Macro to Combine Municipal Proc SQL Statements Based on Date Criteria

date,sas,sas-macro

I would do this in a bit different manner. You can do it in a few ways, but maybe one SQL step and one datastep would be easiest. proc sql; create table lookup_lastdate as select customer_id as start, max(transaction_Date) as label, 'LASTDATEF' as fmtname from transaction_vw group by customer_id; quit;...

Why does my macro behaves differently with call execute()?

sas,call,sas-macro

Let's have a look at the documentation http://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000543697.htm If an EXECUTE routine argument is a macro invocation or resolves to one, the macro executes immediately. However, any SAS statements produced by the EXECUTE routine do not execute until after the step boundary has been passed. Note: Because macro references execute...

Skipping by 2 in a MACRO

sas,sas-macro

Use the %by statement to set the interval of your loop's itterations. %macro bulk_ODI_extract(low_id,high_id); %do loop_match=&low_id %to &high_id %by 2; %ODI_commentary(&loop_match, 2); %end; %mend bulk_ODI_extract; %bulk_ODI_extract(749781,749787); ...

Why won't my macro variable resolve?

sas,sas-macro

Macro variables in SAS won't resolve when they are in single quotes, '&myvar'. They need to be in double quotes, "&myvar", in order to resolve properly. If you need to have single quotes and a resolved macro variable, you have a few options, but the simplest is: %str(%'&myvar.%') The %'...

macro error: A character operand was found in the %EVAL function or %IF condition

macros,sas,sas-macro

The macro %IF statement implicitly calls the %EVAL() function. %EVAL() understands integers (whether positive or negative), but not decimal values. When %EVAL() compares two values, if one of them is a decimal it will do a CHARACTER comparison. So %IF (3.1>10) returns true. If you give %EVAL a decimal with...

SAS sorts my macro variable values

sas,sas-macro

When no order is specified in SQL the order you run the risk of it coming out in a way you don't want as you have in your case. How about adding an order variable(that you then ignore): data curr ; input ordvar currency $ ; cards ; 1 USD...

SAS Macro coding

macros,sas,sas-macro

Short answer is try wrapping your macro call inside %NRSTR(). This will be a long explanation. But the macro language is hard. And the timing of call execute when used to call macros makes it trickier. Most of below is what I learned from many SAS-L posts/papers/discussions by Ian Whitlock....

SAS %macro rerun_loop(arg) doesn't appear to be a function, but was running in SAS

python,sas,sas-macro

That's a simple macro definition. It's not a function, but it has some analogies to it. When called in open code, it will copy the text from the macro definition into the execution stream and will substitute the parameter, as if you'd typed that code out yourself in the program....

SAS differences in outcome between sql and proc means

sas,sas-macro,proc-sql

proc sql noprint; select sum(zindi&aa. * wprm&aa.)/sum(wprm&aa.) into :Mean_zindi_aa from Panel(where=(annee&ap.<="&nais18" )); quit; Try this. Looks like you are trying to do a mean on (zindi&aa. * wprm&aa.). If you need the weighted average the above should work. because weighted average = sum(weight*variable)/sum(weights)...

SAS: assign a quantile to a macro variable

sas,sas-macro

Macro does NOT like unnecessary quotes: %let z = %sysfunc(quantile(normal, 0.975)); ...

SAS proc sql inside %macro

sql,sas,sas-macro

You need to use double quotes when referring to macro variables. Current Code %macro sqlgrp(id=,); proc sql; create table output_&id. as select * from dataset where id = '&id.' ; quit; %mend; %sqlgrp(id=A); /*select id=A only*/ Looks for values of id that are literally '&id.'. You can test this by...

How to write macro for importing multiple excel files(xlsx) in sas and append it

import,sas,sas-macro

Another way to do this would be to use the Excel LIBNAME Engine. You declare a library to each of your files, and then read all the sheets in 1 Data Step. In this example, I have 2 workbooks (Book1.xlsx and Book2.xlsx) in C:\temp. All data is in Sheet1. 3...

How do I use a value that is returned from a Macro Variable in another macro

sas,sas-macro

First, I suspect you have a typo between your code and here. Proper way to define a macro is: %macro blah(x); <do stuff> %mend; not: %macro_blah(x); <do stuff> %mend; The macro is created in %macro_one and defaults to a local scope. You can fix this by declaring it %global. %macro...

How to use a macrovariable as string?

sas,sas-macro

Macro variables are just text fills. The macro variable needs to be a legal SAS value in the data step. %let mv=123; data _null_; x="&mv"; put x=; run; For example. " (double quotes) resolve macro variables, ' (single quotes) do not. In your example, you can also do this without...

Position of a word/var in a list SAS

sas,sas-macro

The Code for position in list is %let list_pos=%sysfunc(countw(%substr(&list,1,%index(&list,16AUG2014)+1))); Cheers...

How do I work out the data type of my macro variable in SAS

sas,sas-macro

H, The SAS macro language is weird. : ) As Reeza said, macro variables do not have a type, they are all text. But, if you use Boolean logic (%IF statement), and both operands are integers, the macro language will do a numeric comparison rather than a character comparison. So...

Why is end parenthesis not closing my %nrstr function?

sas,sas-macro

The percent symbol before the close parenthesis was causing the unexpected behavior. Per SAS(R) 9.2 Macro Language: Reference: percent sign before a parenthesis - for example, %( or %) two percent signs (%%): EXAMPLE: %let x=%str(20%%); making the correct code: %let foo = %nrstr(bar%x%%); %put foo is &foo; resulting in:...

Trying to create a macro which checks for a macro variable existence and creates it if doesn't exist

sas,sas-macro

You almost had it... There were 2 key things you were missing. You need to include the %global statement to declare the macro as a global macro variable. This will make it available outside of the macro. You also were missing the & in your %let statement where you assign...

pass value of the dataset sas to a macro

sas,sas-macro

Not sure why you want 2 macros to do this. Why not just a simple data step? data work.test; set work.prova; if mark_type='A' then do; avg_acc=abs(avg_acceleration)/(cos(abs(mark_angle)*(constant('pi')/180.0))); end; if mark_type='C' then do; avg_acc=abs(avg_acceleration)/(sin(abs(mark_angle)*(constant('pi')/180.0))); end; run; ...

SAS Populate table with PROC SQL INSERT statement and do loop

loops,sas,insert-into,sas-macro,proc-sql

You can only use SELECT statement in INSERT like this: INSERT INTO TABLE1 (col1, col2) SELECT col1, col2 from TABLE2 WHERE ... but not in VALUES clause - there has to be constants: INSERT INTO TABLE1 (col1, col2) VALUES (123, 123) You could also create a temp table and append...

dropping variables using a macro variable containing list of varnames

sas,sas-macro

I'll answer in the order provided. 1.) If you have 2,000+ variables that you want to drop, 1,000 characters is not enough to hold the list of variable names, so the list is getting truncated. You'll need to allocate more space to the allvars variable in your null data step,...

SAS: Creating Tables Dynamically for different dates and table names in one go

sas,sas-macro,enterprise-guide

You could build on the following code Step1 : Creating the dataset which contains all the 12 dates. Not sure how are you calculating the dates for all the 12 months, So I have assumed dataset All_dates contains all your dates with variables - R_act_beg, R_act_end ,name_m,name_y_act,nameR_act. This dataset contains...

How to Declare Global Array Variable in SAS?

arrays,sas,global-variables,sas-macro

What you're trying to do is basically to use a data driven programming approach to drive your macros. Good for you! However, you can't do it directly the way you are trying to. While you could use a macro array the way Yukclam9 mentions, there's an easier way. SAS doesn't...

Implementing recursive bisection in SAS

recursion,sas,sas-macro

Not sure what your macro %nextint does, but I wrote something just to show how the %iter macro will run. You need to put those call symput's in a data step. I used null here just to get new values for the macro variables a0 and b0 from the interval...

SAS ODS escape character macro variable error

sas,sas-macro

What's happening is the escape char seems to need a close parentheses. For example: %put %superq(SYSODSESCAPECHAR);); ; It escapes the ) , which means now you have %put superq(;); In your first example, it's a little trickier because a semicolon by itself doesn't seem to be escaped so you have...

What's wrong with these macro parameters?

sas,sas-macro

Macro variables do not use quotations. %macro test(var); %if &var = %str(Sub Prime) %then %do; %let var2 = Sub_Prime; %put &=var2; %end; %mend; %test(Sub%str( )Prime); You'd be better off using %str around the whole thing, though, rather than inserting the %str in just the space. %test(%str(Sub Prime)); ...

SAS Macro and arrays for tables names

sas,sas-macro

There's a handful of ways to deal with this. Search for "Data driven programming", for example. I'll show two: my preferred one, and the one a lot of people would suggest. First, the popular solution would be to do a macro loop. Properly, I would write a macro with min...

SAS how to use a macro variable as a date

sas,sas-macro

To convert a date string in DDMONYYYY format, simple add a d to the end. '01jan2014'd will convert the string to a date. In your case: &var.d will resolve to '01jan2014'd which will be interpreted as a date....

sas string converting in code

sas,sas-macro

Use double quotes and the macro variable will resolve. declare hash merger (dataset:"data_&i."); ...

Writing a macro in SAS to create a table

sas,sas-macro

You've created a macro but have executed it. This functionality, similar to a function in other languages, allows a macro to compile and execute and different times. Adding in the following line will call the macro. %appendtest; ...

Getting ERROR :Unable to clear or re-assign the library DATA1 because it is still in use in SAS

sas,sas-macro

Try running it in a fresh session. Also ensure if you have it open in a viewer then it is closed. Ensure no other users or processes are using it. Sometimes code will error at some point and prevent the close() statement from running. When this happens it is necessary...

Calling a macro variable from libname

sas,sas-macro

When you want to follow the the resolved value of a macro variable with an immediate additional character you should escape the macro variable with a full stop (.). For example: %let start = one; %put &start.two; %put &start..two; %put &startend; onetwo one.two WARNING: Apparent symbolic reference STARTEND not resolved....

Extend SAS MACRO to multiple fields

sas,sas-macro

To include an arbitrary number of fields to group on, you can list them all in the groupby macro parameter, but the list must be comma-delimited and surrounded by %quote(). Otherwise SAS will see the commas and think you're providing more macro parameters. So in your case, your macro call...

How to write a macro loop over months in YYYYMM format?

sas,sas-macro

In the comment, vol7ron asks an important question: Why do you have 26 tables?? How many observations in your dataset? Can you not append into one dataset? Having a separate data set for each month suggests a problematic design upstream. However, let's assume that's out of your control. One very...

macro variable is uninitialized after %let statement in sas

sas,sas-macro

Solution to immediate problem You need to wrap your macro variables in double quotes if you want SAS to treat them as string constants. Otherwise, it will treat them the same way as any other random bits of text it finds in your data step. Alternatively, you could re-define the...

SAS MACRO: Create many datasets -modify them - combine them into one within one MACRO without need to ouput multiple datsets

sas,sas-macro

You're very close - all you need to do is remove the semicolon in the macro loop and put it after the %end in step 3, as below: data total; set %do n=1 %to &N_VAR.; modified_stid&n %end;; run; This then produces the statement you were after: set modified_stid1 modified_stid2 .......

Sas Macro to semi-efficiently manipulate data

sas,sas-macro

Let's try the alternative solution. For each name find the min/max term via a proc SQL data step. Then use a data step to create the time period table and merge that with your original table. *Sample data; data have ; input name $ term ; cards; Joe 2000 Joe...

Macro variables : Apparent symbolic reference not resolved

sas,sas-macro

Surely it'll be easier/simpler to use the cntlin= option of PROC FORMAT to pass in a dataset containing the relevant format name, start, end, label values... A simple example... /* Create dummy format data */ data formats ; fmtname = 'MYCHARFMT' ; type = 'C' ; do n1 = 'A','B','C','D','E'...

SAS: getting the filesize of created DBF file

stored-procedures,sas,sas-macro

filename() is restricted in environments with OPTION NOXCMD, which is by default set for server environments. This is for security reasons (as XCMD allows shell access). You can enable this with by enabling OPTION XCMD, though your server admin (if this is not you) would have to enable it on...

%DROPMISS - SAS

sas,sas-macro

You need to define the dropmiss macro before you use it. You can find it here in the appendix (page3) http://support.sas.com/resources/papers/proceedings10/048-2010.pdf Or better formatted here: /******************/ options nomprint noSYMBOLGEN MLOGIC; /****************************/ %macro DROPMISS( DSNIN /* name of input SAS dataset */ , DSNOUT /* name of output SAS dataset */...

why macro is creating Leading space while resolving macro in sas?

sas,sas-macro

The reason for this is that your format is set up with a default length of 14. Therefore, when you go to put your value into &today it is stored with leading blanks to fill out the length to 14. From the SAS documentation: DEFAULT=length specifies the default length of...

SAS Macro function conditional on value of Macro Variable

sas,sas-macro

When you use %let statements inside of a macro, the variables default to local scope. That is, they only exist inside the macro. To remedy that add a %global statement inside the macro. %let number = 8; %macro my_function(); %global number_text number_text_2; %if %sysevalf(&number = 8) %then %do; %let number_text...

How to call a macro variable based on a condition

sas,sas-macro

A different solution, not using arrays, using the vvaluex function: varpr = vvaluex(catt('var', condition)); http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a002233818.htm...

Writing vba code in sas

excel,vba,excel-vba,sas,sas-macro

The common way to do this is to use a template file. You have your template saved, which has the excel macro saved in it (and perhaps also has some of the formatting done to it; using DDE you don't have to start with a blank worksheet, after all). You...

How can I see the original sas macro code?

sas,sas-macro

There are two possible ways you could be executing a SAS macro from a permanent library. Either you are using an autocall macro, or a stored compiled macro. An autocall macro would mean you do have access to the source, because it's simply a .sas file with the name of...

A macro function to produce a macro variable from a data variable

sas,sas-macro

DOSUBL is available (but experimental) in 9.3 (at least, 9.3TS1M2, which I have). This is how you'd do it. data sample; input x $; datalines; one two three ; %macro variable_to_macvar(variable=, dataset=); %let rc=%sysfunc(dosubl(%str( proc sql noprint; select &variable into : outlist separated by ' ' from &dataset; quit; )));...

Execute Macro inside SQL statement

sql,macros,sas,sas-macro

In a data step, you can use call execute to do what you're describing. %Macro Max(field, table); proc sql; Select MAX(&field.) From &table.; quit; %mend; data _null_; set table_associations; call execute('%MAX('||field||','||table||')'); run; ...

Conditionally print titles in SAS?

sas,sas-macro

I solve it by adding a semicolon after it. %macro mplot(dsn,vn); title1 'hey!'; %if "&vn"="" %then title2 "Ooos" justify=left; %else title2 "Ooos &vn" justify=left;; title3 "this line"; %mend mplot; But I don't understand why an extra semocolon is needed....

Conditionally replace column values with column name in SAS dataset

sas,sas-macro

The following should do the trick (the first dstep sets up the example):- data test_data; length key A B C D E 3; format key z3.; ** Force leading zeroes for KEY; key=001; A=1; B=.; C=1; D=.; E=1; output; key=002; A=.; B=1; C=.; D=1; E=.; output; proc sort; by key;...