Dans SAS, si je veux supprimer une donnée sortingée avec des duplicates, je peux utiliser l'option proc sort
avec noduprecs
. Et l'option nodupkey
peut supprimer les duplicates par certaines colonnes keys
par exemple
proc sort data=HAVE out=WANT nodupkey;by var1, var2;run;
Dans SQL Server, je sais que select distinct *
peut produire quelque chose comme proc sort noduprecs
. Mais comment générer une sortie comme celle proc sort nodupkey;by var1, var2
fait dans SAS? (returnne la première valeur si des duplicates existent)
MODIFIER
En utilisant la fonction de résumé comme max
, les duplicates peuvent être supprimés tandis que le maximum de ces colonnes non spécifiées dans une déclaration group by
sera returnné.
select key1, max(var1) as var1, key2, key3, max(var2) as var2, max(var3) as var3 from #HAVE group by key1, key2, key3
Mais ce que je veux c'est returnner la première combinaison de (var1, var2, var3).
Donné
key1 var1 key2 key3 var2 var3 K1 20 K2 K3 30 BB K1 10 K2 K3 40 AA
La sortie idéale est
key1 var1 key2 key3 var2 var3 K1 20 K2 K3 30 BB
ne pas
key1 var1 key2 key3 var2 var3 K1 20 K2 K3 40 AA
Selon votre commentaire vous avez un horodatage, en utilisant cet horodatage, il est possible de choisir la "première" combinaison de key1, key2, key3
Voici une solution pour choisir l'set de données earliers pour chaque combinaison de key1, key2, key3
;WITH CTE AS ( SELECT key1, var1, key2, key3, var2, var3, row_number() over (partition by key1, key2, key3 order by timestamp) rn FROM #HAVE ) SELECT key1, var1, key2, key3, var2, var3 FROM CTE WHERE rn = 1