I wrote these macros to add, drop or rename fields. Each checks to see if the field already exists. For addfield, 4th parameter is length for character field or format for numeric field.
%macro AddField(ds, field, type, lenfmt);
%local rc dsid result resx;
%let dsid = %sysfunc(open(&ds));
%let resx = %sysfunc(varnum(&dsid, &field));
%let rc = %sysfunc(close(&dsid));
%if %upcase(&type)=C %then %let spec=char(&lenfmt); %else %let spec=num;
%if %upcase(&type)=N and %length(&lenfmt)>1 %then %let lenfmt=%str(format=)&lenfmt; %else %let lenfmt=;
%if &resx > 0 %then %do;
%let result = 1;
%put NOTE: field &field already exists in &ds;
%end;
%else %do;
%let result = 0;
%put NOTE: field &field does not exist in &ds and will be added;
proc sql;
alter table &ds
add &field &spec &lenfmt
;
quit;
%end;
%mend AddField;
/* ********************************************************************** */
%macro DropField(ds, field);
%local rc dsid result resx;
%let dsid = %sysfunc(open(&ds));
%let resx = %sysfunc(varnum(&dsid, &field));
%let rc = %sysfunc(close(&dsid));
%if &resx > 0 %then %do;
%let result = 1;
%put NOTE: field &field exists in &ds and will be dropped;
proc sql;
alter table &ds
drop &field ;
quit;
%end;
%else %do;
%let result = 0;
%put NOTE: field &field does not exist in &ds;
%end;
%mend DropField;
/* ********************************************************************** */
%macro RenameField(ds, field, newname);
%local rc dsid result resx;
%let dsid = %sysfunc(open(&ds));
%let resx = %sysfunc(varnum(&dsid, &field));
%let rc = %sysfunc(close(&dsid));
%if &resx > 0 %then %do;
%let result = 1;
%put NOTE: field &field exists in &ds and will be renamed to &newname ;
data &ds;
set &ds;
/*&newname = &field ;
drop &field ; */
rename &field = &newname ;
run;
%end;
%else %do;
%let result = 0;
%put NOTE: field &field does not exist in &ds;
%end;
%mend RenameField;
Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.
If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website.
Data Literacy is for all, even absolute beginners. Jump on board with this free e-learning and boost your career prospects.