* Найти переменную с минимальным значением (для каждого наблюдения).
* Макрос сравнивает 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