Search code examples
sassas-macroproc-sql

SAS Array creation


I am trying to create array that hold a value.

proc sql noprint;
select count(*) into :dscnt from study;
select libname into :libname1 - :libname&dscnt from study;
quit;

I think the syntax is correct but i keep getting this following error message in in SAS studio.

***NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.
NOTE: Line generated by the macro variable "DSCNT".
79         libname       4
                      _
                      22
                      200
ERROR 22-322: Syntax error, expecting one of the following: ',', FROM, NOTRIM.  

ERROR 200-322: The symbol is not recognized and will be ignored.***

Can someone explain to me what i am doing wrong?

Thanks


Solution

  • You do not need to know the number of items ahead of time, if you leave it blank, SAS will automatically create the correct number of macro variables.

    If you do want to use that number elsewhere you can create it using the TRIMMED option to remove any extra spaces. See the second example below.

    proc sql noprint;
    select name into :name1- from sashelp.class;
    quit;
    
    %put &name1;
    %put &name19.;
    
    proc sql noprint;
    select count(distinct name) into :name_count TRIMMED from sashelp.class;
    quit;
    
    %put &name_count;
    

    Results:

    3068      proc sql noprint;
    3069      select name into :name1- from sashelp.class;
    3070      quit;
    NOTE: PROCEDURE SQL used (Total process time):
          real time           0.00 seconds
          cpu time            0.01 seconds
    
    
    3071
    3072      %put &name1;
    Alfred
    3073      %put &name19.;
    William
    3074
    3075      proc sql noprint;
    3076      select count(distinct name) into :name_count TRIMMED from
    3076! sashelp.class;
    3077      quit;
    NOTE: PROCEDURE SQL used (Total process time):
          real time           0.01 seconds
          cpu time            0.00 seconds
    
    
    3078
    3079      %put &name_count;
    19