Hi guys,
Thanks a lot for your suggestions and help.
With your help i wrote the followoing code to solve my problem. I am just copy pasting my code here
--------------------------------START-------------------------------------------------
proc sql; select trim(name), trim(name)||'p' into :avl_selected_100K_spalten separated by ' ', :avl_selected_100K_spalten_P99 separated by ' ' from dictionary.columns where libname = 'WORK' and memname = 'AVL_SELECTED_100K_PATCH' and upcase(name) not in('PERSON_ID'); quit; proc univariate data=AVL_SELECTED_100K_Patch noprint; var &avl_selected_100K_spalten.; output out=AVL_SELECTED_100K_P99 pctlpts =99 pctlpre = &avl_selected_100K_spalten. pctlname = p; run; data AVL_SELECTED_100K_P99; set AVL_SELECTED_100K_P99; _TYPE_=0; run; PROC SORT DATA=AVL_SELECTED_100K_P99 OUT=AVL_SELECTED_100K_P99_sort; BY _TYPE_; RUN; PROC TRANSPOSE DATA=AVL_SELECTED_100K_P99_sort OUT=Trans_AVL_SELECTED_100K_P99_sort PREFIX=Column NAME=Column_name LABEL=Label; BY _TYPE_; VAR &avl_selected_100K_spalten_P99.; RUN; data AVL_SELECTED_100K_P99 (drop=_TYPE_ Label rename=(column1=P99)); set Trans_AVL_SELECTED_100K_P99_sort; Column_name=substrn(Column_name,1,length(Column_name)-1); run; proc sql ; select Column_name, P99 into :Column_nameP99 separated by ' ', :Column_nameP99_value separated by ' ' from AVL_SELECTED_100K_P99; quit; %macro computePercentile(); %let count = 0; %do %while (%qscan(&Column_nameP99.,%eval(&count + 1),%str( )) ne ); %let count = %eval(&count + 1); %end; %do i = 1 %to &count; %let currentVar&i = %qscan(&Column_nameP99.,&i,%str( )); %let currentValue&i = %qscan(&Column_nameP99_value.,&i,%str( )); data AVL_SELECTED_100K_Patch; set AVL_SELECTED_100K_Patch; if &¤tVar&i.. gt &¤tValue&i.. then &¤tVar&i.. = &¤tValue&i..; run; %end; %mend; %computePercentile();
--------------------------------------END-----------------------------------------------
... View more