I went to a school with a very large pre-med program/engineering department. Just from freshman biology and chemistry, the pre-med population decreased to about a third of its original size. Many people didn't want to put in the effort to succeed, were distracted by other aspects of college, or didn't go in to office hours when they struggled. One girl who made it through those classes and became my lab partner for biochemistry lab actually complained to our professor that she was smart, and, therefore, shouldn't have to work hard in his class. That was the prevailing attitude of a lot of the freshman/sophomore pre-meds.
In our engineering school, most of the attrition stemmed from the difficulty and work load of the programs offered. Unless you studied at least 2 hours a night or already knew some of the material, you wouldn't do well enough to pass all of your classes. One chemistry/chemical engineering class, we had a mean exam score of 30. Even after the curve, a fourth of our class was still below passing. Most students in our program had received mostly A's in high school and had taken the hardest math and school programs. Getting a 20 on their first engineering exam was a reality check that scared away some students.
Over the past few years teaching applied mathematics, I've noticed that a lot of students tend to shy away from challenges, rather than face them and push through them. Many students have come in for help without attempting the problems on their own first, and some who are failing never show up at all. It's as if they have been conditioned not to exert effort at all--whatever ability they have will carry them through or else they will find something that they can coast through. Students I see again in other courses or around the department are ones who made it through the first year or two of transition to a higher level of work.