Hi Patrick, thank you for your answer. I'll try to provide more information (it's hard to give you all the code and all the log since the whole sas program does a lot more stuff and the code snippets are at different positions of the program): Basically it's coded like you already guessed: the proc datasets procedure is inside a macro which is call several times. The full macro looks like this: %macro index_erstellung (lib,tblname,indxvars); %if %sysfunc(exist(&lib..&tblname.)) %then %do; %put Tabelle vorhanden: &lib..&tblname.; %if "&indxvars" ^= "LVID" %then %do; proc datasets library=&Lib. nolist; modify &tblname; index create indexname = (&indxvars) / UNIQUE; quit; %end; %else %do; proc datasets library=&Lib. nolist; modify &tblname; index create LVID / UNIQUE; quit; %end; %end; %mend index_erstellung; I will try to describe the whole process: I have a .csv file indicating the different tables and which index variables are needed for which of these tables. You find the content of the .csv-file at the end of this post. Then, I import this .csv file to SAS. To generate the input for my macro I use this data step (I guess one could code it way more beautiful - any suggestions are welcome): data WORK.INDEX_ERSTELLUNG; set WORK.INDEX; format indexspalten $250.; if LVID = 1 then indexspalten = 'LVID'; if VTID = 1 then indexspalten = cat(strip(indexspalten),' ','VTID'); if VARIANTEID = 1 then indexspalten = cat(strip(indexspalten),' ','VARIANTEID'); if VBID = 1 then indexspalten = cat(strip(indexspalten),' ','VBID'); if AGENTURID = 1 then indexspalten = cat(strip(indexspalten),' ','AGENTURID'); if FONDSID = 1 then indexspalten = cat(strip(indexspalten),' ','FONDSID'); if KTOBEWID = 1 then indexspalten = cat(strip(indexspalten),' ','KTOBEWID'); if KTOSTDTYPID = 1 then indexspalten = cat(strip(indexspalten),' ','KTOSTDTYPID'); if PARTNERID = 1 then indexspalten = cat(strip(indexspalten),' ','PARTNERID'); if ROLLENID = 1 then indexspalten = cat(strip(indexspalten),' ','ROLLENID'); if AKTYP = 1 then indexspalten = cat(strip(indexspalten),' ','AKTYP'); if KZWERTSICHER = 1 then indexspalten = cat(strip(indexspalten),' ','KZWERTSICHER'); if JAHR = 1 then indexspalten = cat(strip(indexspalten),' ','JAHR'); if MONAT = 1 then indexspalten = cat(strip(indexspalten),' ','MONAT'); if VSYS = 1 then indexspalten = cat(strip(indexspalten),' ','VSYS'); run; Now, I have all the input for my macro, which is called by this data step: data _null_; set work.INDEX_ERSTELLUNG; call symput('VTAB',name); call symput('VINDEXSPALTEN',indexspalten); call execute('%index_erstellung(WORK,&vtab.,&vindexspalten.)'); run; Unfortunately I cannot attach any file, so I'll copy the relevant log parts: ---------------------------------------------------------------------------------- START OF LOG ------------------------------------------------------------------------------------------ NOTE: The infile "/appdata/sas/fb_daten/vrm/lp/lf/E3_index.csv" is: Filename=/appdata/sas/fb_daten/vrm/lp/lf/E3_index.csv, Owner Name=X914119,Group Name=UX_SAS_VRM_LP, Access Permission=rwxrw-r--, Last Modified=Fri Jul 17 08:42:39 2015, File Size (bytes)=905 NOTE: 20 records were read from the infile "/appdata/sas/fb_daten/vrm/lp/lf/E3_index.csv". The minimum record length was 32. The maximum record length was 44. NOTE: The data set WORK.INDEX has 20 observations and 16 variables. NOTE: Compressing data set WORK.INDEX increased size by 100.00 percent. Compressed is 2 pages; un-compressed would require 1 pages. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.01 seconds NOTE: There were 20 observations read from the data set WORK.INDEX. NOTE: The data set WORK.INDEX_ERSTELLUNG has 20 observations and 17 variables. NOTE: Compressing data set WORK.INDEX_ERSTELLUNG increased size by 100.00 percent. Compressed is 2 pages; un-compressed would require 1 pages. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds Tabelle vorhanden: WORK.ABSCHLKO1 Tabelle vorhanden: WORK.ANLOPT1 Tabelle vorhanden: WORK.BEARBNW Tabelle vorhanden: WORK.C_RVWERTE1 Tabelle vorhanden: WORK.HVGRUPPE Tabelle vorhanden: WORK.JURLV Tabelle vorhanden: WORK.JURVT Tabelle vorhanden: WORK.KTOBWG1 Tabelle vorhanden: WORK.KTOSTD1 Tabelle vorhanden: WORK.LV Tabelle vorhanden: WORK.PRV1 Tabelle vorhanden: WORK.RISSCHAETZ Tabelle vorhanden: WORK.SKBILWERT1 Tabelle vorhanden: WORK.SKFONDSANTEIL1 Tabelle vorhanden: WORK.SKSGA Tabelle vorhanden: WORK.SKUEBVERW1 Tabelle vorhanden: WORK.VB1 Tabelle vorhanden: WORK.VERTSCHL1 Tabelle vorhanden: WORK.VPVT1 Tabelle vorhanden: WORK.VT1 NOTE: There were 20 observations read from the data set WORK.INDEX_ERSTELLUNG. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds NOTE: CALL EXECUTE generated line. 1 + proc datasets library=WORK nolist; modify ABSCHLKO1; 1 + index create indexname = (LVID VTID VBID AKTYP JAHR MONAT) / UNIQUE; NOTE: Composite index indexname has been defined. 1 + quit; NOTE: MODIFY was successful for WORK.ABSCHLKO1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.01 seconds cpu time 0.01 seconds 2 + proc datasets library=WORK nolist; modify ANLOPT1; 2 + index create indexname = (LVID VTID VARIANTEID VBID) / UNIQUE; NOTE: Composite index indexname has been defined. 2 + quit; NOTE: MODIFY was successful for WORK.ANLOPT1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 3 + proc datasets library=WORK nolist; modify BEARBNW; 3 + index create LVID / UNIQUE; NOTE: Simple index lvId has been defined. 3 + quit; NOTE: MODIFY was successful for WORK.BEARBNW.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.01 seconds 55 The SAS System 16:20 Friday, July 17, 2015 4 + proc datasets library=WORK nolist; modify C_RVWERTE1; 4 + index create indexname = (LVID VTID VARIANTEID) / UNIQUE; NOTE: Composite index indexname has been defined. 4 + quit; NOTE: MODIFY was successful for WORK.C_RVWERTE1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 5 + proc datasets library=WORK nolist; modify HVGRUPPE; 5 + index create LVID / UNIQUE; NOTE: Simple index lvId has been defined. 5 + quit; NOTE: MODIFY was successful for WORK.HVGRUPPE.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.01 seconds 6 + proc datasets library=WORK nolist; modify JURLV; 6 + index create LVID / UNIQUE; NOTE: Simple index lvId has been defined. 6 + quit; NOTE: MODIFY was successful for WORK.JURLV.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 7 + proc datasets library=WORK nolist; modify JURVT; 7 + index create indexname = (LVID VTID) / UNIQUE; NOTE: Composite index indexname has been defined. 7 + quit; NOTE: MODIFY was successful for WORK.JURVT.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 8 + proc datasets library=WORK nolist; modify KTOBWG1; 8 + index create indexname = (LVID VTID VBID KTOBEWID) / UNIQUE; NOTE: Composite index indexname has been defined. 8 + quit; NOTE: MODIFY was successful for WORK.KTOBWG1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds 56 The SAS System 16:20 Friday, July 17, 2015 cpu time 0.00 seconds 9 + proc datasets library=WORK nolist; modify KTOSTD1; 9 + index create indexname = (LVID VTID VBID FONDSID KTOSTDTYPID) / UNIQUE; NOTE: Composite index indexname has been defined. 9 + quit; NOTE: MODIFY was successful for WORK.KTOSTD1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.02 seconds cpu time 0.03 seconds 10 + proc datasets library=WORK nolist; modify LV; 10 + index create LVID / UNIQUE; NOTE: Simple index lvId has been defined. 10 + quit; NOTE: MODIFY was successful for WORK.LV.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 11 + proc datasets library=WORK nolist; modify PRV1; 11 + index create indexname = (LVID AGENTURID ROLLENID) / UNIQUE; NOTE: Composite index indexname has been defined. 11 + quit; NOTE: MODIFY was successful for WORK.PRV1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 12 + proc datasets library=WORK nolist; modify RISSCHAETZ; 12 + index create indexname = (LVID VTID PARTNERID ROLLENID) / UNIQUE; NOTE: Composite index indexname has been defined. 12 + quit; NOTE: MODIFY was successful for WORK.RISSCHAETZ.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 13 + proc datasets library=WORK nolist; modify SKBILWERT1; 13 + index create indexname = (LVID VTID VARIANTEID) / UNIQUE; NOTE: Composite index indexname has been defined. 13 + quit; 57 The SAS System 16:20 Friday, July 17, 2015 NOTE: MODIFY was successful for WORK.SKBILWERT1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 14 + proc datasets library=WORK nolist; modify SKFONDSANTEIL1; 14 + index create indexname = (LVID VARIANTEID FONDSID) / UNIQUE; NOTE: Composite index indexname has been defined. 14 + quit; NOTE: MODIFY was successful for WORK.SKFONDSANTEIL1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.01 seconds 15 + proc datasets library=WORK nolist; modify SKSGA; 15 + index create indexname = (LVID VTID VBID) / UNIQUE; NOTE: Composite index indexname has been defined. 15 + quit; NOTE: MODIFY was successful for WORK.SKSGA.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 16 + proc datasets library=WORK nolist; modify SKUEBVERW1; 16 + index create indexname = (LVID VTID VARIANTEID VSYS) / UNIQUE; NOTE: Composite index indexname has been defined. 16 + quit; NOTE: MODIFY was successful for WORK.SKUEBVERW1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 17 + proc datasets library=WORK nolist; modify VB1; 17 + index create indexname = (LVID VTID VBID) / UNIQUE; NOTE: Composite index indexname has been defined. 17 + quit; NOTE: MODIFY was successful for WORK.VB1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.01 seconds 18 + proc datasets library=WORK nolist; modify VERTSCHL1; 58 The SAS System 16:20 Friday, July 17, 2015 18 + index create indexname = (LVID VTID FONDSID KZWERTSICHER) / UNIQUE; NOTE: Composite index indexname has been defined. 18 + quit; NOTE: MODIFY was successful for WORK.VERTSCHL1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 19 + proc datasets library=WORK nolist; modify VPVT1; 19 + index create indexname = (LVID VTID PARTNERID ROLLENID) / UNIQUE; NOTE: Composite index indexname has been defined. 19 + quit; NOTE: MODIFY was successful for WORK.VPVT1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.00 seconds 20 + proc datasets library=WORK nolist; modify VT1; 20 + index create indexname = (LVID VTID) / UNIQUE; NOTE: Composite index indexname has been defined. 20 + quit; NOTE: MODIFY was successful for WORK.VT1.DATA. NOTE: PROCEDURE DATASETS used (Total process time): real time 0.00 seconds cpu time 0.01 seconds ---------------------------------------------------------------------------------- END OF LOG ------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------- START OF CSV ------------------------------------------------------------------------------------------ NAME,LVID,VTID,VARIANTEID,VBID,AGENTURID,FONDSID,KTOBEWID,KTOSTDTYPID,PARTNERID,ROLLENID,AKTYP,KZWERTSICHER,JAHR,MONAT,VSYS ABSCHLKO1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0 ANLOPT1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 BEARBNW,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 C_RVWERTE1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 HVGRUPPE,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 JURLV,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 JURVT,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 KTOBWG1,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0 KTOSTD1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0 LV,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0 PRV1,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0 RISSCHAETZ,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0 SKBILWERT1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 SKFONDSANTEIL1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0 SKSGA,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0 SKUEBVERW1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1 VB1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0 VERTSCHL1,1,1,0,0,0,1,0,0,0,0,0,1,0,0,0 VPVT1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0 VT1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0 ---------------------------------------------------------------------------------- END OF CSV ------------------------------------------------------------------------------------------
... View more