SAS if then 重新编码和更改格式问题

问题描述 投票:0回答:2

我需要将数据从字符读取更改为数字读取。我的一些数据显示为 NP 而不是未收集数据的数字。我想创建一个空白的新变量,然后将数据更改为数字(我可以使用关于哪种代码最好的建议,因为有些数据输出相当远,被写为 E-2)。我的问题是,我将 NP 更改为空白的代码似乎使所有行都为空白,而不仅仅是那些表示 MP 的行。我该如何纠正这个问题?

''' data mRNAMerged2;
set mRNAMerged;
if GFPT1= "NP" then GFPT1_2 = " ";
if GFPT2= "NP" then GFPT2_2 = " ";
if GNPNAT1 = "NP" then GFPT1_2 = " ";
if MGAT1 = "NP" then MGAT1_2 = " ";
if NAGK = "NP" then NAGK_2 = " ";
if OGA = "NP" then OGA_2 = " ";
if OGT = "NP" then OGT_2 = " ";
if PGM3 = "NP" then PGM3_2 = " ";
if UAP1 = "NP" then UAP1_2 = " ";
run; '''

sas
2个回答
0
投票

如果源不是“NP”,则您不会将这些变量分配给除缺失之外的任何变量。

更简单的方法可能是将变量输入为数字并忽略错误,无论如何都会默认为缺失,例如

GFPT1_2 = input(GFPT1, ??best32.);


0
投票

由于您分配给 GFPT1_2 的唯一值是“”,因此它不可能具有任何其他值。我怀疑你想做的是:

if GFPT1 ne "NP" then GFPT1_2 = input(GFPT1,32.);

您是如何创建这个数据集的?您是否读取了文本文件(例如 CSV 文件)?如果是这样,那么最好第一次正确读取它,而不是稍后尝试转换值。您可以使用将 NP 转换为缺失的自定义 INFORMAT,或者更好一些特殊的缺失值,例如 .N(表示不存在)。

proc format ;
  invalue np 'NP'=.n other=[32.] ;
run;
data want;
   infile 'myfile.csv' dsd truncover firstobs=2;
   length Numer_of_Patient_per_Sample OGA OGT ... PGM3 8 ;
   informat _numeric_ np.;
   input Number_of_Paitent_per_sample -- pgm3;
run;
© www.soinside.com 2019 - 2024. All rights reserved.