2016-12-12 1 views
2

Dans cette questionPassez un tableau dynamique à itérer proc sql

Simple iteration through array with proc sql in SAS

%macro doit(list); 
proc sql noprint; 
%let n=%sysfunc(countw(&list)); 
    %do i=1 %to &n; 
     %let val = %scan(&list,&i); 
     create table somlib._&val as 
     select * from somlib.somtable 
     where item=&val; 
    %end; 
quit; 
%mend; 

%doit(100 101 102); 

Je veux passer une liste par macro Doït que l'on peut extraire d'un ensemble de données. Par exemple: list contient les valeurs distinctes de la variable 'age' présente dans l'ensemble de données 'agegroups'.

data agegroups; 
input age; 
datalines; 
1 
2 
4 
5 
8 
18 
16 
19 
23; 

Je regardai sur% tableau macro pour elle, mais il ne m'a pas aider (http://www2.sas.com/proceedings/sugi31/040-31.pdf)

Toute aide sera très appréciée. Merci !

+1

On dirait que vous essayez de créer beaucoup de petits ensembles de données à partir d'un seul grand ensemble de données. Dans SAS, il est généralement beaucoup plus simple de créer un seul grand ensemble de données et d'utiliser le traitement par groupe pour faire une boucle sur des valeurs distinctes. – user667489

Répondre

1

Comme indiqué dans les commentaires, le traitement de groupe BY peut être une meilleure option.

Cependant, vous pouvez utiliser SQL PROC pour créer votre liste:

proc sql noprint; 
select distinct age 
    into :ageList separated by ' ' 
    from agegroups; 
quit; 

%put Age List: &ageList; 

%doit(&ageList);