2013-10-05 3 views
0

Я пытаюсь использовать PROC FREQ для подмножества моих данных, называемых dataname. Я хотел бы, чтобы он включал все строки, где varname не равно «A.Never Used». У меня есть следующий код:SAS: инструкция, которая не работает со строковым значением

proc freq data = dataname (где = (varname NE 'A.Never Used')); run;

Я подумал, что может быть проблема с задней или ведущим заготовки таким образом, я также попробовал: данные FREQ

Proc = dataname (где = (полоса (VarName) NE 'A.Never б')); run;

Моя догадка почему-то мои строковые значения не являются «A.Never Used», но всякий раз, когда я печатаю данные, это значение, которое я вижу.

ответ

2

Это распространенная проблема при работе со строковыми данными (и повод не к!). Вы должны рассмотреть источник своих данных - это было сделано из веб-форм? Тогда он, вероятно, содержит неиспользуемые пробелы ('A0'x) вместо регулярных пространств (' 20'x). Это произошло из среды unicode (скажем, японские символы являются законными)? Тогда у вас могут быть проблемы с перекодировкой.

Несколько вариантов, которые работают для подавляющего большинства этих проблем:

  1. Сжать все, кроме букв алфавита. where=(compress(varname,,'ka') ne 'ANeverUsed') например. «ka» означает «сохранить только» и «символы алфавита».
  2. UPCASE или LOWCASE, чтобы вы не столкнулись с проблемами.
  3. Используйте put varname HEX.; в шаге данных, чтобы посмотреть на основные символы. Каждые два шестнадцатеричных символа имеют один символ алфавита. 20 - это пробел (который удалял strip). Сортируйте по varname, прежде чем делать это, чтобы вы могли легко видеть строки, которые, по вашему мнению, должны иметь это значение рядом друг с другом - в чем разница? Вероятно, какой-то особый персонаж или многобайтовые символы, или кто знает что, но это должно быть очевидно здесь.
Смежные вопросы