Je suppose que vous êtes intéressé par toutes les colonnes numériques. Si la variable de macro IFLIST a une longueur supérieure à 64 Ko en raison du nombre de variables numériques et de la longueur de leurs noms, ce code échouera. Cela devrait fonctionner pour tous les ensembles de données raisonnablement étroits.
CODE NON TESTÉ
Nous obtenons une liste des variables dans votre ensemble de données. Nous utilisons cette liste pour créer des instructions et des expressions. Nous utilisons cette liste pour créer des instructions et des expressions. IFLIST est un bloc d'instructions pour stocker la valeur minimale de fieldname dans fieldname_1 et la deuxième plus faible dans fieldname_2. Si la comparaison est LT, alors nous gardons des valeurs distinctes, pas nécessairement les statistiques d'ordre. Si la comparaison est LE et qu'il y a plusieurs observations avec la valeur minimum, fieldname_1 et fieldname_2 seront égaux entre eux. Je suppose que vous voulez des valeurs distinctes.
MAXLIST est une expression qui résoudra à la plus grande valeur numérique dans l'ensemble de données :)
MINLIST et MINLIST2 sont créés pour être utilisés et RETENIR GARDEZ déclarations.
PROC SQL STIMER NOPRINT EXEC ;
SELECT 'IF ' || name || ' LT ' || name '_1 THEN DO;' ||
name || '_2=' || name || '_1;' ||
name || '_1=' || name || ';END;ELSE IF ' ||
name || ' LT ' || name || '_2 THEN ' ||
name || '_2=' || name,
'MAX(' || name || ')',
name || '_1',
name || '_2'
INTO :iflist SEPARATED BY '; ',
:maxlist SEPARATED BY '<>'
:minlist SEPARATED BY ' ',
:min2list SEPARATED BY ' '
FROM md
WHERE type EQ 1
;
Maintenant, nous obtenons la plus grande valeur numérique de l'ensemble de données:
SELECT &maxlist
INTO :maxval
FROM SORTTempTableSorted
;
QUIT ;
Maintenant, nous faisons le travail. L'option END met "eof" à 1 sur la dernière observation, qui est la seule fois où nous voulons écrire un enregistrement dans l'ensemble de données de sortie.
DATA min2 ;
SET SORTTempTableSorted END=eof;
RETAIN &minlist &min2list &maxval;
KEEP &minlist &min2list ;
&iflist ;
IF eof THEN
OUTPUT ;
RUN ;