2017-04-19 88 views
0

我的數據集副本由若干變量:塔塔:刪除基於日期

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input float(v1 v2) str11 Date float(v4 v5 v6 v7 v8) 
1 2 "15-aug-2016" 1 1 1 1 1 
1 2 "07-may-2015" 1 1 1 1 50 
1 2 "07-may-2015" 1 1 1 1 88 
1 2 "15-aug-2016" 1 1 1 1 29 
end 

變量date是日期和時間,被格式化爲日期

generate double date = date(Date,"DMY")

我對於v1-v2-v4-v5-v6-v7(如示例中),重複項是相同的,而v8則不同。

我需要刪除基於v1-v2-v4-v5-v6-v7的副本,並保留最小日期的副本(此處爲2015年5月7日)。

我曾嘗試沒有成功:

1.

gsort -date 
bysort v1 v2 v4 v5 v6 v7: generate dublet=_n 
order dublet date 
keep if dublet==1 
drop dublet 

- >適用於前25行左右,然後保持一個錯幾次,然後正確的再次。 (在我看來,那bysort命令刪除排序gsort做任何知道,如果這是正確的?)

  • bysort v1 v2 v4 v5 v6 v7 (date) : keep if _n == _N

  • - >顯然保持錯誤的,因爲Date不是-Date。 然而,-Date是不是一種選擇 - 塔塔寫道:- invalid name

    +0

    'bysort'肯定會在您的代碼中取消您的'gsort'。與其保留最後一個日期可以保留第一個日期,不必在排序之前直接或間接地否定任何變量。 –

    回答

    2

    你可以你的第二個答案更改爲bysort v1 v2 v4 v5 v6 v7 (date) : keep if _n == 1,並且應該給你你在找什麼。

    由於在您的數據示例中有重複的日期(2個觀測值是2015年5月7日),您將隨機獲得一個具有最小日期的觀測值。

    +0

    非常感謝!那做了這個工作。 並確定與2015年5月7日的兩個! – Msh