Pergunta

Existe algum método inerente SAS para encontrar a ordem de classificação de um conjunto de dados?

Foi útil?

Solução

Como Sassy diz, a única maneira SAS sabe se um conjunto de dados é classificada é se ele fez a triagem, ou se você diga a ele a ordem de classificação explicitamente. Se você não tiver feito uma destas etapas, ele não terá nenhuma idéia se os dados estiverem em qualquer tipo de ordem.

Eu gosto de idéia de AFHood de apenas tentar classificá-lo. Se SAS sabe que é classificada dessa forma ela só vai lhe dizer e não vai fazê-lo novamente.

NOTE: Input data set is already sorted, no sorting done

Aqui estão algumas outras idéias para investigar dados classificação ... Desfrute.

Se você só quer olhar para ele manualmente, você pode usar o conteúdo proc data = libname.data; prazo; e olhar para a saída. Há um atributo chamado ordenada. Se você estiver usando o modo de janelas você pode clique direito sobre o conjunto de dados no Explorer e escolha Propriedades, clique na guia detalhes e ver os valores sortedby.

Para uma abordagem de teste programática, você pode usar um conjunto de dados de saída de conteúdo Proc. As colunas ordenadas e sortedby vai dizer se o conjunto de dados é classificado e qual variável é classificado por. Tente-lo, executando o código abaixo.

/* In an unsorted data set, proc contents will give missing values
   for the sorted and sortedby columns of its output data */
proc contents data=sashelp.class out=class_contents noprint;run;
proc print data=class_contents;
  var memname name sorted sortedby;
run;

/* Now sort and observe the changes in the sorted and sortedby columns */
proc sort data=sashelp.class out=class_sorted; by name;run;
proc contents data=class_sorted out=class_sorted_contents;run;
proc print data=class_sorted_contents;
  var memname name sorted sortedby;
run;`enter code here`

Outras dicas

Se os dados tem sido de fato "classificado", sim. Há um pequeno quadro relativo às informações de classificação na parte inferior da saída produzida pelo conteúdo Proc.

Os conjuntos de dados que foram construídos com os dados que já estava em algum tipo de ordem de classificação pode não ter esta informação que lhes são inerentes e você vai precisar para começar a explorar os dados para determinar a sua ordem.

Você pode usar a função Attrc.

Docs em http://support.sas .com / onlinedoc / 913 / GetDoc / en / lrdict.hlp / a000147794.htm

É algo como o seguinte

data _null_;
   dsid=open("work.a","i");
   sortby=attrc(dsid,"SORTEDBY");
   put  sortby=;
   rc=close(dsid);
run;

Estou assumindo que o problema que você está resolvendo está tentando determinar se um conjunto de dados tem de ser resolvida de forma programática. A melhor solução que usei é simplesmente usar proc espécie em caso de dúvida.

É claro que você pode dizer que é a sobrecarga e processamento .. Bem, sim, mas se o conjunto de dados já estão classificados corretamente, proc tipo com conhecê-lo e deixar o seu movimento de código com o mínimo de processamento. Ele tem o "se ordenados em seguida, seguir em frente" lógica integrada.

Se este não é o problema que você está tentando resolver, elaborar e vamos ver se podemos ajudar.

Se sas não fez classificar os dados, mas você acha que poderia ser resolvido, você pode tentar processá-lo como se estivesse classificada e lidar com os erros que podem ou não ocorrer como resultado.

* This works, swap some values to see how an error looks;
data foo;
input height;
cards;
1
2
3
4
;
run;

data _null_;
set foo;
by height;
run;

estados de erro pode ser detectado e repor em macro, mas essa abordagem é susceptível de ficar confuso. Mais informações sobre isso aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top