2017-07-12 1 views
0

Je courais ce qui suitpourquoi je ne peux pas voir mon fichier de données sur ma bibliothèque définissant

%global source_dir util_dir paramf workdir datadir 
    dataunitid 
    saserror 
    ; 

%let datadir = %str(I:....\KATER\DATA); 
%let outdir = %str(I:...\KATER\Results); 


I set my library 
libname datain "&datadir"; 
options mstored sasmstore=datain; 

and then 

%global liste_reg; 
%let liste_reg=22 31; 
%do k=1 %to %sysfunc(countw(&liste_reg.)); 
%let reg=%scan(&liste_reg.,&k.); 
    data hh_record; set datain.hh_record_&reg.; run; 
    data person_record; set datain.person_record_&reg.; run; 
    %let outdir_ = &outdir.\output_&reg.; 
    proc printto log = "&outdir_.Log.txt"; run; 

Mais je reçois une erreur:

ERROR: File DATAIN.PERSON_RECORD_.DATA does not exist. 
ERROR: File DATAIN.HH_RECORD_.DATA does not exist. 

pourquoi est-ce qui se passe, comment puis-je mettre mes données Bibliothèque de données?

Je suis nouveau dans SAS donc je suis un peu confus. En général, j'ai réalisé qu'il n'y a rien dans les deux bibliothèques?

EDIT code complet:

%global source_dir util_dir paramf workdir datadir 
    dataunitid 
    saserror 
; 
%let source_dir = %str(I:...ONS_Transf_20170523); 

*location of code; 
%let util_dir = &source_dir.%str(\dsp_utils); 
%let datadir = %str(...KATER\DATA); 
%let outdir = %str(...\KATER\Results); 
%let paramf = &datadir.%str(\parameter_file\param.csv); 
options mautosource mrecall sasautos=(sasautos "&source_dir" "&util_dir") nolabel; 

%reset_saserror; 
libname datain "&datadir"; 
options mstored sasmstore=datain; 
libname outdir "&outdir.\output"; 
options mstored sasmstore=outdir; 

%macro sdc_super_control_KAT; 
    %global liste_reg; 
    %let liste_reg=22 31; 

    %do k=1 %to %sysfunc(countw(&liste_reg.)); 
     %let reg=%scan(&liste_reg.,&k.); 

     data hh_record; 
      set datain.hh_record_&reg.; 
     run; 

     data person_record; 
      set datain.person_record_&reg.; 
     run; 

     %let outdir_ = &outdir.\output_&reg.; 

     proc printto log = "&outdir_.Log.txt"; 
     run; 

     /

     %sdc_control; 

     *copy files to permanent library; 
     proc copy in=work out=outdir_; 
      select sdcresults_hh_:; 
     run; 

     proc printto; 
     run; 

    %end; 

    data outdir.params; 
     set diagnostics_params; 
    run; 

%mend sdc_super_control_KAT; 

%sdc_super_control_KAT; 
+0

Exécutez à nouveau votre macro avec les options MPRINT et éventuellement SYMBOLGEN activées. Vous devriez alors pouvoir dire pourquoi la variable macro REG n'est pas définie. Vous pouvez également vérifier votre utilisation de tant de macros. Parfois, cela peut amener le macro-processeur à convertir des choses comme 'person_record_ & reg' en deux jetons au lieu d'un. – Tom

Répondre

1

Je ne pense pas que vous nous montrez le code complet. Le problème ci-dessus semble être dû à la variable macro &reg ne résolvant pas à une valeur, mais rien ne s'affiche pour indiquer pourquoi cela se produirait. En outre, les messages d'erreur sont dans le mauvais ordre (hh_record_) devrait venir en premier dans le journal. En résumé, c'est parce que votre variable reg résout une valeur manquante, ou parce qu'elle n'est pas trouvée (si elle n'est pas trouvée, le journal devrait le dire).

+0

Merci Allan, ensuite j'inclus mon code complet. Je n'ai pas eu votre réponse. – Katerina

+1

Salut Katerina - il est possible que la variable 'k' soit écrasée par une déclaration dans'% sdc_control; '. Pourriez-vous partager le journal? Est-ce mieux de faire cela dans la question qu'en postant une réponse ... –