SAS - как сохранить фактические числа при импорте из CSV-файла с числами в экспоненциальном представлении

Когда я импортировал файл с длинными числовыми идентификаторами из CSV-файла в SAS, я хотел преобразовать числа в текст. Но эти числа хранились в экспоненциальном представлении, поэтому при их преобразовании все последние цифры превращались в нули.

Например, 7.3139908E14 превратилось в ino 731399080000000, хотя должно было быть 731399076376199.

Есть ли способ обойти это? В конечном итоге мне нужно выполнить дедупликацию, а затем экспортировать этот файл в виде текстового файла.

Спасибо!


person user1318306    schedule 06.04.2012    source источник
comment
Это не похоже на проблему с SAS, а на проблему с вашим CSV-файлом. Если вы посмотрите на файл csv, вы увидите 7.3139908E14 или 731399076376199? Если это первый тип, у SAS не может быть никакого способа узнать, какие последние цифры. Вы создали файл CSV в Excel? Если это так, вам нужно отформатировать его по-другому, чтобы он не усекал переменные.   -  person itzy    schedule 07.04.2012
comment
Спасибо за ответ! Проблема в том, что я экспортирую 1,5 миллиона строк данных из базы данных, и я пытался сохранить их как текстовый файл, так и файл csv. С текстовым файлом я могу открыть его, но я не могу изменить формат. С CSV-файлом я могу изменить формат с технической точки зрения, но он слишком велик, и я не могу открыть его полностью.   -  person user1318306    schedule 09.04.2012
comment
Можете ли вы опубликовать несколько строк из файла .txt и несколько строк из файла .csv?   -  person cmjohns    schedule 10.04.2012
comment
Преобразуйте свой столбец в текстовое поле, прежде чем сохранять его в CSV. Например, в базах данных mySQL или SQL Server вы можете сделать это, используя что-то вроде cast(myvariable as char(30)) as my_text_var .   -  person Robert Penridge    schedule 30.08.2012


Ответы (1)


Скажем, ваши данные выглядели так (т.е. числовой идентификатор во второй позиции CSV):

blah;7313990763761997;blah

Вы можете выполнить простое чтение файла, строка за строкой, и получить прямой доступ к входному буферу (переменная _INFILE_):

filename mycsv "\path\to\mycsv.csv";

data mydata;
  infile mycsv;
  input;
  length idvar $16;
  idvar=scan(_infile_,2,";");
run;

Это сохранит номер в текстовом формате, если это все, что вы хотите сделать.

person DavB    schedule 10.04.2012