Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>There's probably a simpler way but this is what I came up with. </p> <p>Cheers Rob</p> <p>EDIT: Note that this works for both character and numeric variables. </p> <pre><code>** ** TEST DATASET *; data x; col1 = "a"; col2 = ""; col3 = "c"; output; col1 = "" ; col2 = ""; col3 = "c"; output; col1 = "a"; col2 = ""; col3 = "" ; output; run; ** ** GET A LIST OF VARIABLE NAMES *; proc sql noprint; select name into :varlist separated by " " from sashelp.vcolumn where upcase(libname) eq "WORK" and upcase(memname) eq "X"; quit; %put &amp;varlist; ** ** USE A MACRO TO CREATE A DATASTEP. FOR EACH COLUMN THE ** THE DATASTEP WILL CREATE A NEW COLUMN WITH THE SAME NAME ** BUT PREFIXED WITH "DELETE_". IF THERE IS AT LEAST 1 ** NON-MISSING VALUE FOR THE COLUMN THEN THE "DELETE" COLUMN ** WILL FINISH WITH A VALUE OF 0, ELSE 1. WE WILL ONLY ** KEEP THE COLUMNS CALLED "DELETE_" AND OUTPUT ONLY A SINGLE ** OBSERVATION TO THE FINAL DATASET. *; %macro find_unused_cols(iDs=); %local cnt; data vars_to_delete; set &amp;iDs end=eof; %let cnt = 1; %let varname = %scan(&amp;varlist, &amp;cnt); %do %while ("&amp;varname" ne ""); retain delete_&amp;varname; delete_&amp;varname = min(delete_&amp;varname, missing(&amp;varname)); drop &amp;varname; %let cnt = %eval(&amp;cnt + 1); %let varname = %scan(&amp;varlist, &amp;cnt); %end; if eof then do; output; end; run; %mend; %find_unused_cols(iDs=x); ** ** GET A LIST OF VARIABLE NAMES FROM THE NEW DATASET ** THAT WE WANT TO DELETE AND STORE TO A MACRO VAR. *; proc transpose data=vars_to_delete out=vars_to_delete; run; proc sql noprint; select substr(_name_,8) into :vars_to_delete separated by " " from vars_to_delete where col1; quit; %put &amp;vars_to_delete; ** ** CREATE A NEW DATASET CONTAINING JUST THOSE VARS ** THAT WE WANT TO KEEP *; data new_x; set x; drop &amp;vars_to_delete; run; </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload