2015-09-30 1 views
0

macro SAS pour lire plusieurs fichiers RAWDATA et créer plusieurs ensemble de données SAS pour chaque fichier de données brutesSAS macro pour lire plusieurs fichiers RAWDATA et créer plusieurs ensemble de données SAS pour chaque fichier de données brutes

Salut à

Mon nom est Chandra. Je ne suis pas très bon en macro SAS en particulier la partie en boucle et en résolvant & &. etc. Voici ma déclaration de problème. Problème: J'ai un grand nombre de fichiers de données brutes (fichiers .dat) stockés dans un dossier sur un serveur SAS. J'ai besoin d'une macro capable de lire chacun de ces fichiers de données brutes et de créer un ensemble de données SAS pour chaque fichier de données brutes et de les stocker dans un dossier cible distinct sur le serveur SAS. Tous ces fichiers de données brutes ont la même structure de mise en page. J'ai besoin d'automatiser cette opération pour que chaque semaine, la macro lit les fichiers de données brutes du dossier source et crée le jeu de données SAS correspondant et les stocke dans le dossier cible du serveur SAS. Par exemple, s'il existe 200 fichiers de données brutes dans un dossier source, je souhaite les lire et créer 200 jeux de données SAS pour chaque fichier de données brutes et les enregistrer dans un dossier cible. Je ne suis pas très bon à la construction de déclaration en boucle et également résoudre & & ou & & & etc. Comment faire?

J'apprécierais hautement votre aide aimable à cet égard.

respectueusement

Chandra

+0

Comment connais-tu le nom des fichiers? Comment allez-vous définir les noms des ensembles de données? Pourquoi avez-vous besoin de générer plusieurs ensembles de données, pourquoi ne pas simplement lire tous les fichiers dans un seul ensemble de données? Pourquoi avez-vous besoin d'une macro au lieu d'un simple programme? Avez-vous déjà essayé quelque chose? Si oui, quoi? – Tom

Répondre

0

Vous ne devez pas nécessairement utiliser une macro ou une boucle dans le cas où vous avez des fichiers avec des mêmes champs. Vous pouvez essayer l'option pipe et le mot-clé filename. Voici les link

0

Vous n'avez pas besoin d'une macro pour ce type de traitement. L'instruction INFILE acceptera une spécification de fichier incluant des caractères génériques du système d'exploitation.

Cet exemple crée 200 fichiers texte dans le dossier de travail, puis les relit en une seule étape.

Je recommande fortement pas de créer 200 ensembles de données distincts. Gardez plutôt le nom de fichier, ou une portion unique de celui-ci, comme une variable catégorielle qui peut être utilisée plus tard dans une instruction CLASS ou BY, ou dans le cadre des critères d'un sous-paramètre WHERE.

%let workpath = %sysfunc(pathname(WORK)); 

* create something to input; 

data _null_; 
    do i = 0 to 1999; 
    if mod(i,10) = 0 then filename = cats("&workpath./",'sample',i/10,'.txt'); 
    file sample filevar=filename; 
    x = i; y = x**2; 
    put i x y; 
    end; 
run; 

* input data from 200 different files that have the same layout; 

data samples; 
    length filename $250; 
    infile "&workpath.\*.txt" filename=filename; %* <-- Here be the wildcards; 
    input i x y; 
    source = filename; 
run;