Я пытаюсь разрешить переменную шага данных в функции in (). У меня есть набор данных, который выглядит следующим образом:
|Run|Sample Level|Samples Tested|
| 1 | 1 | 1-5 |
| 1 | 2 | 1-5 |
...etc
| 1 | 5 | 1-5 |
---------------------------------
| 2 | 1 | 1-4 |
| 2 | 2 | 1-4 |
Испытанные образцы различаются в зависимости от пробега. Обычно единственными уровнями выборки в наборе данных являются уровни в диапазоне, указанном в «Проверенных образцах». Однако иногда это не так, и это может стать грязным. Например, последний, над которым я работал, выглядел так:
|Run|Sample Level|Samples Tested|
| 1 | 1 |2-9, 12-35, 37-40|
В этом случае я бы хотел отбросить все строки с уровнями образцов, которые не были включены в проверенные образцы, что я сделал вручную, добавив код:
Data Want;
set Have;
if sample_level not in (2:9, 12:35, 37:40) then delete;
run;
Но то, что я хочу сделать, это сделать это автоматически, посмотрев на колонку проверенных образцов. Достаточно легко превратить «-» в «:», но я застрял в том, что функция IN()
распознает или разрешает переменную. Мне бы хотелось, чтобы код выглядел следующим образом: if sample_level not in(Samples_Tested) then delete;
, где samples_tested был преобразован в нечто, что может обрабатывать функция IN()
. Я также не против использования proc sql;
, если у кого-то есть решение, которое, по его мнению, будет работать. Я знаю, что вы можете делать такие вещи, как
Proc sql; Create table want as select * from HAVE where Sample_Level in (Select Samples_Tested from Have); Quit;
Но проблема в том, что тестируемые образцы меняются в зависимости от серии, и может быть 16 различных серий. Надеюсь, я объяснил проблему достаточно ясно. Спасибо, что нашли время, чтобы прочитать это и заранее спасибо за вашу помощь!