Hi Shmuel, ok so then a simplified version of the proc template program goes like this for a single dataset named 'set0001' : ods path(prepend) work.templat(update); proc template; /*tagset defined and named as xmlexport*/ define tagset tagsets.xmlexport /store=work.templat; define event doc; start: /*put required declarations in xml*/ put "<?xml version=""1.0"""; putq " encoding=" encoding; put " ?>"; put "<!--xml file to input the services data for price calculation-->"; put "<shipments>"; put "<header>"; put "<sourceref>x0203p</sourceref>"; put "<version>1.0</version>"; put "</header>"; eval $counter 0; eval $currentvalue "1"; eval $previousvalue "2"; eval $currentpk "3"; eval $previouspk "4"; finish: put "</pack>"; put "</shipment>"; put "</shipments>"; end; /*execution of the event 'data' performed for each row*/ define event row; start: trigger data /if cmp(section,"body"); end; /*step execution of columns within the main body of available data*/ define event data; start: set $currentvalue value /if cmp(name,"shipnumber"); do /if ^cmp($currentvalue, $previousvalue); put "</pack>" /if (cmp(name," shipnumber ") and ^cmp($previousvalue, "2")); put "</shipment>" /if (cmp(name," shipnumber ") and ^cmp($previousvalue, "2")); put "<shipment>" /if cmp(name," shipnumber "); put "< shipnumber >" value /if cmp(name," shipnumber "); put "</ shipnumber >" /if cmp(name," shipnumber "); eval $currentpk "3"; eval $previouspk "4"; done; set $currentpk value /if cmp(name,"pack"); do /if (cmp($currentvalue, $previousvalue) and ^cmp($currentpk, $ previouspk)) or (^cmp($currentvalue, $previousvalue)); put "</ pack >" /if (cmp(name," pack ")and cmp($currentvalue, $previousvalue)); put "< pack >" /if cmp(name," pack "); put "<packnumber>" value /if cmp(name," pack "); put "</packnumber>" /if cmp(name," pack "); put "<volume>" value /if cmp(name,"volume"); put "</volume>" /if cmp(name,"volume"); put "<weight>" value /if cmp(name,"weight"); put "</weight>" /if cmp(name,"weight"); done; set $previousitem $currentitem /if cmp(name,"weight"); set $previousvalue $currentvalue /if cmp(name," weight "); end; end; run; ods markup type=xmlexport file='/shared/data/test_ods.xml'; proc print data=work.set0001; run; ods markup close;
... View more