Obtenir les 10 premiers est facile:
/*First 10 obs*/
proc print data = ia.usage(obs = 10); run;
Tirer le 10 dernier est un peu plus difficile, mais cela peut être fait en utilisant une vue:
/*Last 10 obs*/
data last10 /view = last10;
startobs = nobs - 9;
set ia.usage nobs = nobs firstobs = startobs;
drop startobs;
run;
proc print data = last10; run;
Si vous voulez à la fois dans le même proc print, vous pouvez créer deux vues et les combiner dans une autre vue, puis l'imprimer:
data first10 /view = first10;
set ia.usage(obs = 10);
run;
data first10_last10 /view = first10_last10;
set first10 last10;
run;
proc print data = first10_last10; run;
La méthode ci-dessus doit être Ry rapide, même pour les grands ensembles de données, mais il suppose que votre ensemble de données initial n'est pas une vue, car il repose sur la connaissance du nombre de lignes (nobs) dans l'ensemble de données. Si vous avez une vue, vous devrez lire tout le jeu de données pour connaître le nombre de lignes, puis le relire, en jetant tout sauf la première et la dernière rangée. Ce sera beaucoup plus lent. Par exemple.
data first10_last10 /view = first10_last10;
do nobs = 1 by 1 until(eof);
set ia.usage(drop = _all_) end = eof; /*We only want the row count, so drop all vars on this pass to save a bit of time*/
end;
do _n_ = 1 to nobs;
set ia.usage;
if _n_ <= 10 or _n_ >= nobs - 9 then output;
end;
run;
proc print data = first10_last10;
Cela peut être lent pour les grands ensembles de données car il implique la lecture de l'ensemble des données plutôt que seulement les 10 premières/dernières lignes. – user667489
oui, d'accord, l'approche que vous avez présentée est plus efficace –