Хорошо, это похоже на очень простую вещь, но я не могу объяснить, что на самом деле делает «by statement» в sas datastep. Я знаю, когда мне нужно его использовать, но я не уверен, что он делает.Что такое инструкция, выполняемая на шаге sas data?
В приведенном ниже примере я понимаю, что представляет собой виртуальный столбец sas first.var и last.var, когда он имеет значения, которые он выполняет. Является ли оператор by, создающий эти виртуальные столбцы вокруг начального и металлического var? Затем sas сканирует весь набор данных один раз?
data jewelers ;
input id initial $ metal $ ;
datalines;
456 D Gold
456 D Silver
123 L Gold
123 L Copper
123 L PLatinum
567 R Gold
567 R Gold
567 R Gold
345 A Platinum
345 A Silver
345 A Silver
;
proc sort ;
by initial metal ;
run;
data dups;
set jewelers ;
by initial metal ;
if not (first.metal and last.metal) then output;
run;
если я Proc печати Dups Я ожидаю, что это:
567 R Gold
567 R Gold
567 R Gold
345 A Silver
345 A Silver
в вашем примере 'first.id' и' last.id' неинициализированы, так как они не отображаются в '' '' '. Чтобы увидеть, какие скрытые переменные созданы, добавьте инструкцию 'put _all_;' после вашего оператора 'by'. (Делайте это только для небольших наборов данных, поскольку он может заполнить журнал). – mjsqu