Как импортировать отформатированный файл «.sas7bdat» в «R» без удаления формата?

Пока я проверял эту ссылку , я все еще пытаюсь получить отформатированный файл sas в R, поскольку у меня есть отформатированный файл .sas7bdat ( прикреплен здесь), но когда я попытался импортировать его в R, я заметил, что все форматы были потеряны. Я использовал 2 разных кода:

## Code 1:
##========
library(haven)
data <- read_sas("C:/Users/mmr2011/OneDrive/R codes/df_nsclc1.sas7bdat", NULL)

## Code 2:
##========
library(sas7bdat)
data("sas7bdat.sources")

data<-read.sas7bdat("C:/Users/mmr2011/OneDrive/R codes/df_nsclc1.sas7bdat", debug= F)

table(data$SEX) # gives me 1 and 2 instead of males and females
#     1      2 
#880916 799960 

# Then I tried this code (as I have sas catalog folder named format so I added that to my prior code; formats.sas7bcat) as follows
#===============================================================================
data<- read_sas("C:/Users/mmr2011/OneDrive/OneDrive/R codes/df_nsclc1.sas7bdat", catalog_file = "C:/Users/mmr2011/OneDrive/OneDrive/R codes/formats.sas7bcat") 

# table(data$SEX)
#   1     2 
#50190 66064 

Хотя мне нужно, чтобы они были такими, какие они есть в sas, как следует

Я использую папку каталога SAS в Windows, которая показана ниже (скриншот № 5). Так же Он доступен здесь

Любой совет будет принят с благодарностью

Ответ на размещенную вами ссылку показывает, как сообщить read_sas() название каталога форматов, но в опубликованном вами коде не видно, что вы пытались это сделать.

Tom 26.12.2020 16:37

@ Том, я исправлю это, как я пытался, но это еще не решено.

Mohamed Rahouma 26.12.2020 16:44

Вы уверены, что форматы, указанные в наборе данных, который вы читаете, действительно определены в каталоге форматов, который вы предоставили read_sas()?

Tom 26.12.2020 17:20

Имя моего каталога sas - форматы, и он находится в той же папке «C:/Users/mmr2011/OneDrive/R codes». При попытке fmt <- readLines('C:/Users/mmr2011/OneDrive - med.cornell.edu/OneDrive/R codes including sts/formats.sas') выдает ошибку No such file or directory. Я что-то пропустил?

Mohamed Rahouma 26.12.2020 18:00

Каталог форматов имеет расширение sas7bcat. Если у вас есть файл с расширением sas, то это файл программы, а не каталог форматов. Если это так, вы можете прочитать текст кода и преобразовать его в синтаксис R для определения меток значений в R, но это будет зависеть от того, сможете ли вы понять стиль, который программист использовал при написании кода SAS. Если у вас возникли проблемы, разместите примеры содержимого файла в качестве нового вопроса.

Tom 26.12.2020 18:38

Когда вы предоставляете новую информацию, лучше отредактировать свой вопрос, а не просто оставить его в комментариях. Есть ли у вас доступ к SAS для преобразования файла .sas в каталог форматов?

Reeza 26.12.2020 19:27

@Reeza Спасибо за ваши усилия, вы и @Tom. У меня есть папка каталога с именем formats, и я добавил catalog_file = в свой код read_sas(), как вы можете видеть в моем отредактированном коде выше, но это не решает проблему. Ценю вашу помощь. проголосовал.

Mohamed Rahouma 26.12.2020 20:14

Файл .sas не является каталогом в формате SAS, это код SAS для создания каталога. Каталоги зависят от системы (т.е. отличаются в Windows/Unix), поэтому это обычное дело при переносе каталогов. Для пакета read_sas() требуется каталог, поэтому ваш текущий подход НЕ МОЖЕТ работать. Вам необходимо преобразовать файл .sas в каталог с помощью SAS или вручную перекодировать ваши данные. Файл .sas — это просто текст, его можно открыть в любом редакторе. Существуют бесплатные версии SAS, особенно для ученых, но обычно это Unix, поэтому не уверен, что они вам подойдут.

Reeza 29.12.2020 02:51

@Reeza Спасибо за ваш вклад. Я отредактировал свой вопрос. Я использую папку каталога SAS в Windows, показанную на (скриншот № 5)

Mohamed Rahouma 29.12.2020 20:44

Насколько я понимаю, ваш последний код должен был работать. Можете ли вы поделиться файлом каталога, чтобы кто-то еще воспроизвел проблему? Вы уверены, что у вас установлена ​​последняя версия Haven?

Reeza 30.12.2020 00:52

@Reeza Спасибо за ваши усилия. Проголосовал. Я загрузил свой каталог SAS и добавил к нему гиперссылку.

Mohamed Rahouma 30.12.2020 17:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
11
1 755
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что проблема у вас, скорее всего, в непонимании того, как работают метки R.

Когда я использую следующий код SAS:

libname temp 'h:\temp\';
proc format lib=temp;
  value sexf
  1='Female'
  2='Male'
  ;
  value racef
  1='Black'
  2='Asian'
  3='White'
  4='Other'
  ;
  value hispf
  1='Of Hispanic Origin'
  2='Not of Hispanic Origin'
  ;
quit;
options fmtsearch=(temp);
data temp.rtest;
  input sex race hisp;
  format sex sexf. race racef. hisp hispf.;
datalines;
1 1 1
2 1 1
1 2 1
2 2 1
1 3 1
2 3 1
1 4 1
2 4 1
1 1 2
2 1 2
1 2 2
2 2 2
1 3 2
2 3 2
1 4 2
2 4 2
;;;;
run;

А затем используйте следующий код R:

library(haven)
data <- read_sas("H:/temp/rtest.sas7bdat", catalog_file = "H:/temp/formats.sas7bcat")   
print(data)

Он работает как положено - консоль печатает помеченный текст.

# A tibble: 16 x 3
          sex      race                       hisp
    <dbl+lbl> <dbl+lbl>                  <dbl+lbl>
 1 1 [Female] 1 [Black] 1 [Of Hispanic Origin]    
 2 2 [Male]   1 [Black] 1 [Of Hispanic Origin]    
 3 1 [Female] 2 [Asian] 1 [Of Hispanic Origin]    
 4 2 [Male]   2 [Asian] 1 [Of Hispanic Origin]    
 5 1 [Female] 3 [White] 1 [Of Hispanic Origin]    
 6 2 [Male]   3 [White] 1 [Of Hispanic Origin]    
 7 1 [Female] 4 [Other] 1 [Of Hispanic Origin]    
 8 2 [Male]   4 [Other] 1 [Of Hispanic Origin]    
 9 1 [Female] 1 [Black] 2 [Not of Hispanic Origin]
10 2 [Male]   1 [Black] 2 [Not of Hispanic Origin]
11 1 [Female] 2 [Asian] 2 [Not of Hispanic Origin]
12 2 [Male]   2 [Asian] 2 [Not of Hispanic Origin]
13 1 [Female] 3 [White] 2 [Not of Hispanic Origin]
14 2 [Male]   3 [White] 2 [Not of Hispanic Origin]
15 1 [Female] 4 [Other] 2 [Not of Hispanic Origin]
16 2 [Male]   4 [Other] 2 [Not of Hispanic Origin]

Однако, если я просмотрю его в средстве просмотра RStudio, дважды щелкнув набор данных на панели данных, это не так, и это то, что вы вставили в вопрос (это изображение). Я не верю, что это поддерживается (метки переменных означают метки заголовков столбцов, но не метки значений); если вы хотите убедиться, что вы можете задать новый вопрос, особо упомянув об этом, с приведенным здесь кодом (вы можете использовать мой пример кода).

Что вы, вероятно, захотите сделать, так это преобразовать метки значений в factors. Это можно сделать несколькими способами; в документации по пакету с меткой обсуждается, почему это можно сделать, но есть несколько подходов. Опять же, это был бы хороший отдельный вопрос, если вы не можете понять это самостоятельно. Факторы — это то, как R обычно управляет подобными вещами (т. е. категориальными переменными).

Спасибо. Я попробую это и дам вам знать. Ценить.

Mohamed Rahouma 31.12.2020 19:15

Другие вопросы по теме