無效的字元資料的處理

2021-05-24 09:37:47 字數 2902 閱讀 7107

以之前的資料(clean.patients)為例,如果我們要識別字元型變數比如gender等是否有效,以及列出不合要求的資料,我們可以有以下幾種選擇。

1.data step

title "listing of invalid patient numbers and data values";

data _null_;                  /*空資料集,提高效率*/

set clean.patients;

if gender not in ('f' 'm' ' ') then put patno= gender=; /*核查gender變數*/

if verify(trim(dx),'0123456789') and not missing(dx)

then put patno= dx=;    /*verify用於返回屬於trim(dx)而屬於後面字串的字元位置*/

/*這裡等價於sas 9中得到if notdigit(trim(dx)) and not missing*/

if ae not in ('0' '1' ' ') then put patno= ae=; /*核實變數ae*/

run;

2.條件語句where

title "listing of invalid character values";

proc print data=clean.patients;

where gender not in ('m' 'f' ' ') or

notdigit(trim(dx)) and not missing(dx) or

ae not in ('0' '1' ' ');

id patno;

var gender dx ae;

run;

3.設定格式標籤format語句

proc format;

value $gender 'f','m' = 'valid'

' '     = 'missing'

other   = 'miscoded';

value $ae '0','1' = 'valid'

' '     = 'missing'

other  = 'miscoded';

run;

title "listing of invalid patient numbers and data values";

data _null_;

set clean.patients(keep=patno gender ae);

if put(gender,$gender.) = 'miscoded' then put patno= gender=;

if put(ae,$ae.) = 'miscoded' then put patno= ae=;

run;

另外我們需要對這些無效的資料進行處理,可以刪除這些資料也可以選擇保留:

1.將無效資料設為缺失可以利用設定自定義格式標籤的方法,將無效資料設定為缺失

proc format;

invalue $gen    'f','m' = _same_   /*_same_系統儲存變數,變數名包括等號左邊的*/

other   = ' ';

invalue $ae    '0','1' = _same_

other  = ' ';

run;

data clean.patients_filtered;

infile "c:/books/clean/patients.txt" truncover; /*該檔案以文字形式存在*/

input @1  patno    $3.

@4  gender   $gen1.

@27 ae       $ae1.;

label patno   = "patient number"

gender  = "gender"

ae      = "adverse event?";

run;

title "listing of data set patients_filtered";

proc print data=clean.patients_filtered;

var patno gender ae;

run;

2.保留無效資料,利用input函式,注意不是input語句。這種方法可以直接對sas資料集操作。

proc format;

invalue $gender 'f','m' = _same_

other  = 'error';

invalue $ae      '0','1' = _same_

other   = 'error';

run;

title "listing of invalid character values";

data _null_;

file print; /*輸出到視窗*/

set clean.patients; /*clean庫中已存在資料patients*/

if input (gender,$gender.) = 'error' then /*input函式建立變數gender,格式gender.*/

put @1 "error for gender for patient:" patno" value is " gender;

if input (ae,$ae.) = 'error' then

put @1 "error for ae for patient:" patno" value is " ae;

run;

參考文獻《cody's data cleaning techniques using sas》

XML十六進製制無效字元的處理

xml十六進製制無效字元的處理 在對生成的xml檔案進行xsd驗證時。提示 xml 十六進製制值是無效的字元 請看如下截圖,如果出現這樣的文字 比如ascii列印字元等不可見字元 而且這種字元即時使用cdatd也還是報錯的,所以必須使用替換的方式來實現,收集的網上 不做具體的研究,如果你也碰到了。請...

MySQL無效資料的約束

在mysql 5.0.2之前,mysql對非法或不當值並不嚴厲,而且為了資料輸入還會強制將它們變為合法值。在mysql 5.0.2和更高版本中,保留了以前的預設行為,但你可以為不良值選擇更傳統的處理方法,從而使得伺服器能夠拒絕並放棄出現不良值的語句。本節介紹了mysql的預設行為 寬大行為 新的嚴格...

listview點選無效的處理方法 推薦

android的listview,當item裡面有可點選的元素,比如說checkbox,焦點就會給了checkbox,點選item就無效了。解決方法是在item的xml裡面,最外層,新增 android descendantfocusability blocksdescendants 就可以了。以上...