Пока я проверял эту ссылку , я все еще пытаюсь получить отформатированный файл 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()
?
Имя моего каталога 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
. Я что-то пропустил?
Каталог форматов имеет расширение sas7bcat
. Если у вас есть файл с расширением sas
, то это файл программы, а не каталог форматов. Если это так, вы можете прочитать текст кода и преобразовать его в синтаксис R для определения меток значений в R, но это будет зависеть от того, сможете ли вы понять стиль, который программист использовал при написании кода SAS. Если у вас возникли проблемы, разместите примеры содержимого файла в качестве нового вопроса.
Когда вы предоставляете новую информацию, лучше отредактировать свой вопрос, а не просто оставить его в комментариях. Есть ли у вас доступ к SAS для преобразования файла .sas в каталог форматов?
@Reeza Спасибо за ваши усилия, вы и @Tom. У меня есть папка каталога с именем formats, и я добавил catalog_file = в свой код read_sas()
, как вы можете видеть в моем отредактированном коде выше, но это не решает проблему. Ценю вашу помощь. проголосовал.
Файл .sas не является каталогом в формате SAS, это код SAS для создания каталога. Каталоги зависят от системы (т.е. отличаются в Windows/Unix), поэтому это обычное дело при переносе каталогов. Для пакета read_sas()
требуется каталог, поэтому ваш текущий подход НЕ МОЖЕТ работать. Вам необходимо преобразовать файл .sas в каталог с помощью SAS или вручную перекодировать ваши данные. Файл .sas — это просто текст, его можно открыть в любом редакторе. Существуют бесплатные версии SAS, особенно для ученых, но обычно это Unix, поэтому не уверен, что они вам подойдут.
@Reeza Спасибо за ваш вклад. Я отредактировал свой вопрос. Я использую папку каталога SAS в Windows, показанную на (скриншот № 5)
Насколько я понимаю, ваш последний код должен был работать. Можете ли вы поделиться файлом каталога, чтобы кто-то еще воспроизвел проблему? Вы уверены, что у вас установлена последняя версия Haven?
@Reeza Спасибо за ваши усилия. Проголосовал. Я загрузил свой каталог SAS и добавил к нему гиперссылку.
Я думаю, что проблема у вас, скорее всего, в непонимании того, как работают метки 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, дважды щелкнув набор данных на панели данных, это не так, и это то, что вы вставили в вопрос (это изображение). Я не верю, что это поддерживается (метки переменных означают метки заголовков столбцов, но не метки значений); если вы хотите убедиться, что вы можете задать новый вопрос, особо упомянув об этом, с приведенным здесь кодом (вы можете использовать мой пример кода).
Что вы, вероятно, захотите сделать, так это преобразовать метки значений в factor
s. Это можно сделать несколькими способами; в документации по пакету с меткой обсуждается, почему это можно сделать, но есть несколько подходов. Опять же, это был бы хороший отдельный вопрос, если вы не можете понять это самостоятельно. Факторы — это то, как R обычно управляет подобными вещами (т. е. категориальными переменными).
Спасибо. Я попробую это и дам вам знать. Ценить.
Ответ на размещенную вами ссылку показывает, как сообщить
read_sas()
название каталога форматов, но в опубликованном вами коде не видно, что вы пытались это сделать.