Uma pergunta rápida: por que o sas resolve o seguinte código
data prova_2;
input id_2 $ age_2;
datalines;
zz 22
zz 22
zz 22
zz 23
xx 22
xx 24
aa 25
;
run;
data prova_2;
set prova_2;
if id_2="zz" then do; if age_2=23; end;
run;
gerando a seguinte tabela?
insira a descrição da imagem aqui
Em vez disso, eu esperaria que ele produzisse apenas uma única linha, ou seja, a linha 1, aquela com id_2="zz" e age_2=23. Qualquer ideia?
Desde já, obrigado!
Você está executando o subconjunto IF apenas em ALGUMAS das observações.
Portanto, todas as observações em que ID_2 não é zz também continuarão até o final da etapa de dados e serão gravadas.
Então você está fazendo o equivalente a
Se você não codificar uma instrução OUTPUT explícita, haverá uma instrução OUTPUT implícita na parte inferior da etapa DATA. Portanto, seu código é equivalente a:
Uma maneira de obter a saída desejada seria adicionar uma instrução OUTPUT dentro do loop DO:
Ou apenas use um único subconjunto IF: