将另一种语言的 CSV 导入 SAS
import CSV in another language to SAS
我正在尝试将法语的 CSV 文件导入到我的美国分析中。我注意到导入中的几个问题与重音的使用有关。我把csv文件放到一个text里reader,发现数据是这样的
我不确定如何删除 [子] 部分并正确格式化。
我使用的是 SAS 9.3,无法编辑 CSV,因为它是与法国研究人员共享的 CSV。由于管理员权限,我也只能在 SAS 中使用其他语言进行操作。
我尝试了以下修复方法:
data want(encoding=asciiany);
set have;
comment= Compress(comment,'0D0A'x);
comment= TRANWRD(comment,'0D0A'x,'');
comment= TRANWRD(comment,'0D'x,'');
comment= TRANWRD(comment,"\u001a",'');
如何解决这些问题?
虽然这在几十年前会是一个主要问题,但如今,确定编码然后 运行 您的 SAS 处于正确的模式非常简单。
首先,在文本编辑器中打开 CSV,不是基本的记事本,而是几乎任何其他编辑器; Notepad++ 是免费的,例如,或 Ultraedit 或 Textpad,在 Windows 或 Mac 上,BBEdit 或其他几个都可以。我将假设 Notepad++ 用于此答案的其余部分,但它们都有某种方式可以做到这一点。如果您处于受限的 no-admin-rights 环境中,那么好消息是:Notepad++ 可以安装在您的用户文件夹中而无需管理员权限(甚至可以安装在 USB 上!)。 (此外,高级文本编辑器是重要的数据科学工具,因此您无论如何都应该拥有一个。)
在Notepad++中,打开文件后,右下角会出现编码:“UTF-8”、“WLATIN1”、“ASCII”等,具体取决于文件的编码。看看那是什么,写下来。
获得该编码后,您可以尝试以该编码启动 SAS。对于其余部分,我假设它是 UTF-8,因为这是相当标准的,但是用您确定的任何编码替换 UTF-8。早些时候。
有关详细信息,请参阅 this article;这些说明是针对 9.4 的,但它们多年来一直是相同的。如果这不起作用,您需要与您的 SAS 管理员联系,他们可能需要修改您的 SAS 安装。
您可以:
- 制作一个新的快捷方式(您 运行 SAS 使用的快捷方式的副本)并将
-encoding UTF-8
添加到命令行
- 创建一个新的配置文件,将 SAS 指向它,并在配置文件中包含
ENCODING=UTF-8
。
请注意,这会产生一些其他影响 - 您创建的数据集将以 UTF-8 编码,虽然 SAS 能够处理它,但它会在日志中添加一些额外的注释,如果您需要一些额外的时间稍后在非 UTF8 SAS 中使用它,或者如果您在此模式下使用非 UTF8 SAS 数据集。
这有效:
data want;
array f[8] _temporary_ ('ä' 'ö' 'ü' 'ß' 'Ä' 'Ö' 'Ü' 'É');
array t[8] _temporary_ ('ae' 'oe' 'ue' 'ss' 'Ae' 'Oe' 'Ue' 'E');
set have;
newvar=oldvar;
newvar = Compress(newvar,'0D0A'x);
newvar = TRANWRD(newvar,'0D0A'x,'');
newvar = TRANWRD(newvar,'0D'x,'');
newvar = TRANWRD(newvar,"\u001a",'');
newvar = compress(newvar, , 'kw');
do _n_=1 to dim(f);
d=tranwrd(d, trim(f[_n_]), trim(t[_n_]));
end;
run;
我正在尝试将法语的 CSV 文件导入到我的美国分析中。我注意到导入中的几个问题与重音的使用有关。我把csv文件放到一个text里reader,发现数据是这样的
我不确定如何删除 [子] 部分并正确格式化。
我使用的是 SAS 9.3,无法编辑 CSV,因为它是与法国研究人员共享的 CSV。由于管理员权限,我也只能在 SAS 中使用其他语言进行操作。
我尝试了以下修复方法:
data want(encoding=asciiany);
set have;
comment= Compress(comment,'0D0A'x);
comment= TRANWRD(comment,'0D0A'x,'');
comment= TRANWRD(comment,'0D'x,'');
comment= TRANWRD(comment,"\u001a",'');
如何解决这些问题?
虽然这在几十年前会是一个主要问题,但如今,确定编码然后 运行 您的 SAS 处于正确的模式非常简单。
首先,在文本编辑器中打开 CSV,不是基本的记事本,而是几乎任何其他编辑器; Notepad++ 是免费的,例如,或 Ultraedit 或 Textpad,在 Windows 或 Mac 上,BBEdit 或其他几个都可以。我将假设 Notepad++ 用于此答案的其余部分,但它们都有某种方式可以做到这一点。如果您处于受限的 no-admin-rights 环境中,那么好消息是:Notepad++ 可以安装在您的用户文件夹中而无需管理员权限(甚至可以安装在 USB 上!)。 (此外,高级文本编辑器是重要的数据科学工具,因此您无论如何都应该拥有一个。)
在Notepad++中,打开文件后,右下角会出现编码:“UTF-8”、“WLATIN1”、“ASCII”等,具体取决于文件的编码。看看那是什么,写下来。
获得该编码后,您可以尝试以该编码启动 SAS。对于其余部分,我假设它是 UTF-8,因为这是相当标准的,但是用您确定的任何编码替换 UTF-8。早些时候。
有关详细信息,请参阅 this article;这些说明是针对 9.4 的,但它们多年来一直是相同的。如果这不起作用,您需要与您的 SAS 管理员联系,他们可能需要修改您的 SAS 安装。
您可以:
- 制作一个新的快捷方式(您 运行 SAS 使用的快捷方式的副本)并将
-encoding UTF-8
添加到命令行 - 创建一个新的配置文件,将 SAS 指向它,并在配置文件中包含
ENCODING=UTF-8
。
请注意,这会产生一些其他影响 - 您创建的数据集将以 UTF-8 编码,虽然 SAS 能够处理它,但它会在日志中添加一些额外的注释,如果您需要一些额外的时间稍后在非 UTF8 SAS 中使用它,或者如果您在此模式下使用非 UTF8 SAS 数据集。
这有效:
data want;
array f[8] _temporary_ ('ä' 'ö' 'ü' 'ß' 'Ä' 'Ö' 'Ü' 'É');
array t[8] _temporary_ ('ae' 'oe' 'ue' 'ss' 'Ae' 'Oe' 'Ue' 'E');
set have;
newvar=oldvar;
newvar = Compress(newvar,'0D0A'x);
newvar = TRANWRD(newvar,'0D0A'x,'');
newvar = TRANWRD(newvar,'0D'x,'');
newvar = TRANWRD(newvar,"\u001a",'');
newvar = compress(newvar, , 'kw');
do _n_=1 to dim(f);
d=tranwrd(d, trim(f[_n_]), trim(t[_n_]));
end;
run;