Cara SAS untuk mengulang tabel di luar langkah data
Saya bertanya-tanya apa cara terbersih bagaimana melakukan perulangan makro di atas tabel data di luar langkah data untuk misalnya membaca dalam file dari tabel have
dan melakukan beberapa analisis kompleks untuk masing-masing file.
Asumsikan kita memiliki tabel yang have
berisi sekumpulan nama file dan data meta lainnya:
N filename purpose
1 foo.xls Blue team data
2 bar.xls Read team data
Saya sedang memikirkan sesuatu seperti
%local lines current_file current_purpose;
proc sql noprint;
select count(*) into: lines from have;
quit;
%do I=1 %to &lines.;
%put --- Process file number &I. ---;
data _null_;
set have;
if _n_=&I. then do;
call symput('current_file',filename);
call symput('current_purpose',purpose);
end;
run;
%put --- ¤t_file. contains &purpose.;
/* Here comes the actual analysis */
%end;
Apakah ini cara melakukannya? Bagi saya, ini bukan cara yang paling sederhana.
Pertanyaan-pertanyaan Terkait:
- SAS melalui kumpulan data
- Pernyataan SAS let: mengacu pada nilai sel?
Jawaban
Jadi jika Anda mendefinisikan sebuah nama makro ANALISIS dengan parameter masukan NAMA FILE dan TUJUAN.
%macro analysis(filename,purpose);
/* Here comes the actual analysis */
title &purpose ;
proc import datafile="&filename" ....
%mend;
Kemudian Anda dapat menggunakan langkah data untuk menghasilkan satu panggilan ke makro untuk setiap observasi. Anda dapat menggunakan CALL EXECUTE, tetapi saya merasa lebih jelas dan lebih mudah untuk melakukan debug dengan hanya menulis kode ke file dan kemudian% TERMASUK. Terutama ketika nama parameter cocok dengan nama variabel di metadata yang digunakan untuk mendorong pembuatan kode.
Jadi langkah ini:
filename code temp;
data _null_;
set have;
file code;
put '%analysis(' filename= ',' purpose= :$quote. ')' ;
run;
Akan menghasilkan program seperti:
%analysis(filename=foo.xls,purpose="Blue team data")
%analysis(filename=bar.xls,purpose="Red team data")
Yang kemudian dapat Anda jalankan menggunakan
%include code / source2;