Saya ingin menerapkan kode VBA ke dalam kode SAS saya, sehingga saya dapat melakukan seluruh proses dalam sekali proses. Kode SAS saya membaca tabel SAS besar, melakukan beberapa transformasi, dan akhirnya mengekspor ke Excel file (kode di bawah). Saya juga menulis beberapa kode VBA di file Excel (misalnya AutoFiltering untuk beberapa variabel, Anda bisa melihat kodenya di bawah).
Tabelnya terlihat seperti ini:
A B C Var1 Var2 Var3
--------------------
1 1 1 10 15 20
1 1 2 15 20 30
1 2 1 20 30 40
1 2 2 30 40 50
2 1 1 40 50 60
2 1 2 50 60 70
2 2 1 60 70 80
..............
..............
Namun, Saya ingin menerapkan kode VBA saya ke dalam kode SAS saya, sehingga saya dapat melakukan seluruh proses dengan sekali proses. Saya tahu cara membuka dan menjalankan file Excel di SAS (kodenya ada di bawah ), tapi saya tidak tahu cara mengimplementasikan kode VBA di SAS saya.
Jika Anda bertanya-tanya mengapa saya ingin menerapkan kode Makro di SAS saya, saya akan bekerja dengan tabel SAS serupa berkali-kali di masa mendatang, jadi akan lebih praktis untuk menyimpan seluruh kode di satu tempat.
Saya baru menyadari bahwa saya tidak dapat mengekspor tabel di SAS dalam format Excel yang mendukung makro, XLSM. Saya rasa ini juga sebuah tantangan. Selain itu, tidak praktis menyimpan kode Makro dari file Excel, karena harus disimpan di menu Add-in. Jadi akan lebih baik jika menangani seluruh proses di satu tempat, seperti di dalam editor SAS.
Kode di SAS yang mengekspor tabel akhir ke file Excel:
PROC EXPORT DATA=File1
OUTFILE= "&server\&env\test1.xlsx"
DBMS=EXCEL REPLACE;
SHEET="sheet1";
RUN;
Contoh kode VBA di file Excel untuk membuat AutoFilter untuk variabel di file Excel:
Sub Macro1()
Dim N As Long, r As Range
With Sheets("sheet1")
N = .Cells(Rows.Count, "B").End(xlUp).Row
ReDim ary(1 To N)
For i = 1 To N
ary(i) = .Cells(i, 1)
Next i
End With
Range("A1:F20").AutoFilter
ActiveSheet.Range("$A$1:$F$20").AutoFilter Field:=1, Criteria1:=ary, Operator:=xlFilterValues
End Sub
Kode di SAS untuk memulai dan menjalankan file Excel di SAS:
OPTIONS NOXWAIT NOXSYNC;
DATA _NULL_;
RC=SYSTEM('START EXCEL');
RC=SLEEP(0.5);
RUN;
FILENAME CMDS DDE 'EXCEL|SYSTEM';
DATA _NULL_;
FILE CMDS;
PUT "[OPEN(""&server\&env\test1.XLS"")]";
PUT '[RUN("Macro1")]';
PUT '[SAVE.AS("&server\&env\FORMATTED_FILE.XLSM")';
PUT "[QUIT()]";
RUN;
QUIT;
x
(dengan asumsi Anda menggunakan Windows). Jika Anda perlu meneruskan parameter, Anda dapat melakukannya sebagai bagian dari panggilanx
. - person Tim Williams   schedule 26.06.2015