* Найти переменную с минимальным значением (для каждого наблюдения).
* Макрос сравнивает 3 или больше переменных и, для каждого наблюдения, 
  определяет имена переменных, имеющих минимальное значение (либо записывает PASS, если минимум
  определить не удалось, например, когд авсе значения пропущены - примеч. перев.).
* Автор кода: Maciek Lobinski.
data list list /a b c d.
begin data
5 7 0 .
5 9 10 6
5 7 11 6
6 7 10 8
6 7 13 4
5 7 9 6
1 13 14 1
1 10 12 5
1 7 13 1
2 2 2 7
end data.
list.
define findmin (!positional= !charend('|')
 /poziom=!tokens(1))
!let !pusta=''.
!let !ciag=''.
recode !1 (0=sysmis). /*Внимание! Если требуется, чтобы нули участвовали в поиске минимума, удалите эту строку целиком - примеч. перев.*/
string !poziom (a20).
!do !i !in (!1).
!let !ciag=!concat(!ciag,',',!i).
!doend.
compute #wyb__=min(!tail(!ciag)).
compute !poziom=' '.
!do !I !in (!1).
if (!I)=#wyb__ !poziom=concat(rtrim(!poziom),!quote(!I)).
!doend.
recode !poziom (''='PASS').
variable labels
!poziom !quote(!concat('Min of ',!1)).
freq !poziom.
!enddefine.
*example:.
set mprint=yes.
findmin a b c |poziom=newvar.
findmin a c d |poziom=newvar2.
set mprint=no.
******************************.
* Результат первого вызова макроса:
Min of a b c
 	 	Frequency	Percent	Valid Percent	Cumulative Percent	 
Valid	a	9	90.0	90.0	90.0	 
 	abc	1	10.0	10.0	100.0	 
 	Total	10	100.0	100.0	 	 
* Результат второго вызова макроса:
Min of a c d
 	 	Frequency	Percent	Valid Percent	Cumulative Percent	 
Valid	a	6	60.0	60.0	60.0	 
 	ac	1	10.0	10.0	70.0	 
 	ad	2	20.0	20.0	90.0	 
 	d	1	10.0	10.0	100.0	 
 	Total	10	100.0	100.0