SAS DATA Шаг, почему это простое утверждение IF не работает? - PullRequest
0 голосов
/ 08 ноября 2019

я не получаю его, у меня есть это, если оператор определяет, какое значение хранить в переменной en tmp

%let csvfil= L:\work\sij\ss.csv;
filename ss "L:\work\sij\ss.txt";
data tester;


if a = 1 then
    tmp = "infile '" || strip("&csvfil") || "'";
else if a = 2 then
    tmp = "infile '" || strip("&csvfil") || "'" || "encoding='windows'";
put tmp;

run;

Так, когда a = 1, он должен поставить «infile» ||strip ("& csvfil") ||"'";в переменной tmp Когда a не равно 1, следует поместить tmp = "infile '" ||strip ("& csvfil") ||"'" ||"encoding = 'windows'";

Этого не происходит?

Тогда я попробовал простой тест, который работает нормально, так что на самом деле я не понимаю.

data simse;
 a=2;
 if a = 1 then 
  tmp = 'simse';
 else
  tmp = 'frede';
 run;

1 Ответ

2 голосов
/ 08 ноября 2019

Ваш шаг DATA не содержит оператора SET, поэтому компилятор шага данных не знает о переменной с именем a в операторе if. Компилятор «добавит» переменную a в PDV как неинициализированную (что означает, что ее значение будет отсутствующим значением .).

Ваш журнал должен показать

NOTE: Variable a is uninitialized.

Поскольку отсутствующее значение не соответствует предложению if или else if, переменной tmp никогда не присваивается значение.

Компилятору не известно о переменной tmp в точке егопервое присваивание, поэтому компилятор «добавляет» tmp в PDV с типом и длиной, полученными из типа и длины первого выражения, которому он назначен.

data tester;


if a = 1 then
    tmp = "infile '" || strip("&csvfil") || "'";
else if a = 2 then
    tmp = "infile '" || strip("&csvfil") || "'" || "encoding='windows'";
put tmp;

run;
...