Как создать набор данных SAS из другого набора данных, используя только последние n наблюдений из исходного набора данных. Это легко, когда вы знаете значение n. Если я не знаю «n», как это можно сделать?SAS - Как получить последние наблюдения «n» из набора данных?
ответ
Предполагается, что у вас есть макропеременная, в которой указано, сколько наблюдений вы хотите. NOBS сообщает вам количество наблюдений в наборе данных в настоящее время, не читая всего этого.
%let obswant=5;
data want;
set sashelp.class nobs=obscount;
if _n_ gt (obscount-&obswant.);
run;
Используя пример Джо макроскопически переменной, чтобы указать количество наблюдений вы хотите, вот еще один ответ:
%let obswant = 10;
data want;
do _i_=nobs-(&obswant-1) to nobs;
set have point=_i_ nobs=nobs;
output;
end;
stop; /* Needed to stop data step */
run;
Это должно работать лучше, так как он читает только конкретные замечания, которые вы хотите.
Мне любопытно об условиях «это должно быть лучше». Я подозреваю, что это некоторые из них; случайный доступ не такой быстрый, как последовательный доступ, поэтому там есть некоторая потеря. Можете проверить это, если у меня есть время. Я подозреваю, что, если вы используете большинство наблюдений, что это будет быстрее делать это последовательно, но если это большой набор данных, и вы хотите небольшое количество наблюдений, то быстрее сделать это random = access. Заставляет меня пожелать, чтобы у SAS был способ открыть набор данных в обратном порядке, не сортируя его первым. – Joe
@Joe Представьте набор данных с 1 миллионом обьем, и вы хотите «последний» 10. Используя этот метод, выполняются только 10 «входных» операций. Использование только значения NOBS требует 1 миллион операций ввода. В зависимости от того, насколько «широкий» набор данных, это различие может быть очень значительным. – BellevueBob
Правильно, я, конечно, вижу возможность для этого быстрее. Мне любопытно, в какой момент это быстрее/медленнее (т. Е. Какой размер набора данных, какой% данных вытягивается - 10 из 1MM, конечно, будет быстрее, но как насчет 500k от 1MM?) – Joe
Ради разнообразия, здесь другой подход (не обязательно лучше один)
%let obswant=5;
proc sql noprint;
select nlobs-&obswant.+1 into :obscalc
from dictionary.tables
where libname='SASHELP' and upcase(memname)='CLASS';
quit;
data want;
set sashelp.class (firstobs=&obscalc.);
run;
Примечание: вы хотите указать формат при использовании select..into, в противном случае значение форматируется как BEST8., что приводит к странным ошибкам при выборе значения> = 100 000 000 (он форматируется в экспоненциальной нотации, что приводит к округлению). – Nickolay
Если набор данных велик, вы не можете прочитать весь набор данных. Вместо этого вы можете попробовать конструкцию, которая сначала считывает общее количество наблюдений в наборе данных. Поэтому, если вы хотите получить последние наблюдения:
data t;
input x;
datalines;
1
2
3
4
;
%let dsid=%sysfunc(open(t));
%let num=%sysfunc(attrn(&dsid,nlobs));
%let rc=%sysfunc(close(&dsid));
%let number = 2;
data tt;
set t (firstobs = %eval(&num.-&number.+1));
run;
- 1. Печать SAS Макросы N Наблюдения
- 2. как печатать нечетные пронумерованные наблюдения из набора данных SAS
- 3. первые и последние наблюдения в sas
- 4. Split SAS набора данных
- 5. Удалить N максимум из набора данных в sas
- 6. SQL получить последние записи из набора данных
- 7. как поменять первые и последние наблюдения в sas-наборе данных, если он содержит 3 наблюдения
- 8. Как получить последние данные из отсортированного набора?
- 9. SAS: AVG() одного наблюдения
- 10. Извлечение «динамической» части из набора данных SAS
- 11. SAS добавляет новые наблюдения для продольных данных
- 12. SAS - отдельные индивидуальные наблюдения
- 13. Как удалить пустые наблюдения в наборе данных в SAS
- 14. Изменить SAS набора данных
- 15. Как выбрать последние 2 наблюдения по группе?
- 16. Изменение одного наблюдения в данных SAS набор
- 17. чтение набора данных несколько раз в SAS
- 18. Специальный формат наблюдения SAS
- 19. SAS: Сравнение двух наборов данных, но необходимо отбросить дополнительные наблюдения из одного набора.
- 20. Получить последние 2 наблюдения каждой страны
- 21. Изменить наблюдения в переменной SAS
- 22. Как получить только последние 4 рабочих дня данных в SAS?
- 23. Subset SAS набора данных с некоторыми значениями из PROC FREQ
- 24. Как вывести случайный набор наблюдений из набора данных SAS
- 25. Получить последние N записей из таблицы
- 26. сочетающие 2 SAS набора данных
- 27. Realm получить последние n результатов
- 28. sas vlookup в той же строке из другого набора данных
- 29. Как изменить заголовки столбцов набора данных sas в наблюдение?
- 30. Найти самые последние наблюдения - R
Что значит, вы не знаете 'n'? Как вы узнаете значение «n» - это переменная набора данных, макропеременная, параметр? – Joe